我有一個方法,將不會返回到瀏覽器的響應,我試過使用瀏覽器本身和鉻擴展POSTMan。任務<T>在WebApi沒有響應,但返回非任務工程
[AllowAnonymous]
[Route("getNotifications")]
[AcceptVerbs("Get", "Post")]
public Task<List<UserNotifications>> GetNotifications()
{
Task<List<UserNotifications>> userNotList = new Task<List<UserNotifications>>(() => new List<UserNotifications>{
new UserNotifications()
{
UserId = new Guid(),
MessageText = "Message 1",
MessageTime = DateTime.Now,
Status = true,
Subject = "new message 1"
},
new UserNotifications()
{
UserId = new Guid(),
MessageText = "Message 2",
MessageTime = DateTime.Now,
Status = true,
Subject = "new message 2"
},
new UserNotifications()
{
UserId = new Guid(),
MessageText = "Message 3",
MessageTime = DateTime.Now,
Status = true,
Subject = "new message 3"
}
});
return userNotList;
}
但是,如果我改變方法不返回類型任務...
[AllowAnonymous]
[Route("getNotifications")]
[Authorize]
[AcceptVerbs("Get", "Post")]
public List<UserNotifications> GetNotifications()
{
var newstring = "";
List<UserNotifications> userNotList = new List<UserNotifications>{
new UserNotifications()
{
UserId = new Guid(),
MessageText = "Message 1",
MessageTime = DateTime.Now,
Status = true,
Subject = "new message 1"
},
new UserNotifications()
{
UserId = new Guid(),
MessageText = "Message 2",
MessageTime = DateTime.Now,
Status = true,
Subject = "new message 2"
},
new UserNotifications()
{
UserId = new Guid(),
MessageText = "Message 3",
MessageTime = DateTime.Now,
Status = true,
Subject = "new message 3"
}
};
return userNotList;
}
我得到的每一次
[
{
"userId": "00000000-0000-0000-0000-000000000000",
"subject": "new message 1",
"messageText": "Message 1",
"messageTime": "2014-05-19T11:03:32.707957-04:00",
"status": true
},
{
"userId": "00000000-0000-0000-0000-000000000000",
"subject": "new message 2",
"messageText": "Message 2",
"messageTime": "2014-05-19T11:03:32.707957-04:00",
"status": true
},
{
"userId": "00000000-0000-0000-0000-000000000000",
"subject": "new message 3",
"messageText": "Message 3",
"messageTime": "2014-05-19T11:03:32.707957-04:00",
"status": true
}
]
爲什麼當我使用任務並沒有得到回來之後通過測試呼叫直接返回瀏覽器到webapi服務?
編輯1
更改方法來這個......還是坐在旋轉它的輪子出於某種原因
[AllowAnonymous]
[Route("getNotifications")]
[AcceptVerbs("Get", "Post")]
public async Task<List<UserNotifications>> GetNotifications()
{
Task<List<UserNotifications>> userNotList = new Task<List<UserNotifications>>(() => new List<UserNotifications>{
new UserNotifications()
{
UserId = new Guid(),
MessageText = "Message 1",
MessageTime = DateTime.Now,
Status = true,
Subject = "new message 1"
},
new UserNotifications()
{
UserId = new Guid(),
MessageText = "Message 2",
MessageTime = DateTime.Now,
Status = true,
Subject = "new message 2"
},
new UserNotifications()
{
UserId = new Guid(),
MessageText = "Message 3",
MessageTime = DateTime.Now,
Status = true,
Subject = "new message 3"
}
});
return await userNotList;
}
然而,當我改成了這個......
[AllowAnonymous]
[Route("getNotifications")]
[AcceptVerbs("Get", "Post")]
public Task<List<UserNotifications>> GetNotifications()
{
var newstring = "";
List<UserNotifications> userNotList = new List<UserNotifications>{
new UserNotifications()
{
UserId = new Guid(),
MessageText = "Message 1",
MessageTime = DateTime.Now,
Status = true,
Subject = "new message 1"
},
new UserNotifications()
{
UserId = new Guid(),
MessageText = "Message 2",
MessageTime = DateTime.Now,
Status = true,
Subject = "new message 2"
},
new UserNotifications()
{
UserId = new Guid(),
MessageText = "Message 3",
MessageTime = DateTime.Now,
Status = true,
Subject = "new message 3"
}
};
return Task.FromResult(userNotList);
}
它返回的結果很好......任何人都可以澄清這些方法之間的區別。我冒險進入Task,asnyc的領地,等待着,但我仍然需要能夠使用類似POSTMan的方式直接測試Webapi的調用。
EDIT 2 以下變化的兩個工作...
[AllowAnonymous]
[Route("getNotifications")]
[AcceptVerbs("Get", "Post")]
public Task<List<UserNotifications>> GetNotifications()
{
var userNotList = Task.Run(
() => new List<UserNotifications>{
new UserNotifications()
{
UserId = new Guid(),
MessageText = "Message 1",
MessageTime = DateTime.Now,
Status = true,
Subject = "new message 1"
},
new UserNotifications()
{
UserId = new Guid(),
MessageText = "Message 2",
MessageTime = DateTime.Now,
Status = true,
Subject = "new message 2"
},
new UserNotifications()
{
UserId = new Guid(),
MessageText = "Message 3",
MessageTime = DateTime.Now,
Status = true,
Subject = "new message 3"
}
});
return userNotList;
}
[AllowAnonymous]
[Route("getNotifications")]
[AcceptVerbs("Get", "Post")]
public async Task<List<UserNotifications>> GetNotifications()
{
var userNotList = Task.Run(
() => new List<UserNotifications>{
new UserNotifications()
{
UserId = new Guid(),
MessageText = "Message 1",
MessageTime = DateTime.Now,
Status = true,
Subject = "new message 1"
},
new UserNotifications()
{
UserId = new Guid(),
MessageText = "Message 2",
MessageTime = DateTime.Now,
Status = true,
Subject = "new message 2"
},
new UserNotifications()
{
UserId = new Guid(),
MessageText = "Message 3",
MessageTime = DateTime.Now,
Status = true,
Subject = "new message 3"
}
});
return await userNotList;
}
嘗試「return await userNotList;」 – Ishtiaq
...也許使方法'async'。那麼它應該工作。 –
你究竟在做什麼?如果你有(同步)數據要返回,只需同步返回(不包含在任務中)。 –