【发布时间】:2017-04-26 13:59:23
【问题描述】:
我有一些代码(详见下文)使用 HttpClient.PostAsync 在通过 Owin 托管的控制器上调用 WebApi 方法。调用到达正确控制器上的正确方法并按预期工作,直到我检查 HttpResponse 对象的 StatusCode。在我的服务器端代码中,如果发生异常,我会返回 Ok() 或 BadRequest()。但是,无论调用 Ok() 还是 BadRequest(),StatusCode 始终为 NoContent (204)。如何修复它以使 StatusCode 符合预期的是 OK (200) 或 BadRequest (400)?
客户端代码:
public async Task<bool> RegisterUser(string server, string userName, string password)
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(server);
var response = await client.PostAsync($"/authentication/user/register?userName={HttpUtility.UrlEncode(userName)}&password={HttpUtility.UrlEncode(password)}", new StringContent(string.Empty));
return response.StatusCode == HttpStatusCode.OK;
}
}
服务器端代码:
public void Register(string userName, string password)
{
try
{
_securityService.RegisterUser(userName, password);
}
catch (Exception e)
{
BadRequest();
return;
}
Ok();
}
Owin配置代码:
var config = new HttpConfiguration();
config.Routes.MapHttpRoute("AuthenticationApi", "authentication/{controller}/{action}");
config.DependencyResolver = lifetimeScope.Resolve<IDependencyResolver>();
app.UseWebApi(config);
【问题讨论】:
-
您可以阅读docs.microsoft.com/en-us/aspnet/web-api/overview/…。如果方法返回
void它将返回 204 -
非常有帮助。谢谢!
标签: c# .net asp.net-web-api controller owin