Web API 2 Post 404s,但 Get 有效
Web API 2 Post 404s, but Get works
我很困惑...我有一个非常简单的 Web API 和控制器,如果我有一个 GET 请求,它工作正常,但如果我有一个 POST 请求,它会工作正常。
[RoutePrefix("api/telemetry/trial")]
public class LoginTelemetryController : ApiController
{
[Route("login")]
[HttpPost]
public IHttpActionResult RecordLogin(string appKey) {
using (var context = new Core.Data.CoreContext()) {
context.ActivityLogItems.Add(new Domain.Logging.ActivityLogItem()
{
ActivityType = "Trial.Login",
DateUtc = DateTime.UtcNow,
Key = new Guid(appKey)
});
context.SaveChanges();
}
return Ok();
}
当我 post 在 postman 中反对这个时,我得到:
{
"message": "No HTTP resource was found that matches the request URI 'http://localhost:47275/api/telemetry/trial/login'.",
"messageDetail": "No action was found on the controller 'LoginTelemetry' that matches the request."
}
如果我将其更改为 [HttpGet]
并将 appKey 作为查询字符串,一切都很好。
我的应用启动非常简单:
public void Configuration(IAppBuilder app)
{
log4net.Config.XmlConfigurator.Configure();
HttpConfiguration httpConfig = new HttpConfiguration();
httpConfig.MapHttpAttributeRoutes(); // <------ HERE
FilterConfig.RegisterHttpFilters(httpConfig.Filters);
LoggingConfig.RegisterHandlers(httpConfig.Services);
ConfigureOAuth(app);
ConfigureWebApi(httpConfig);
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
app.UseWebApi(httpConfig);
}
任何人都可以找出为什么找不到 POST 请求吗?谢谢
如果我取出字符串参数并将其替换为请求对象,它就可以工作...
而不是:public IHttpActionResult RecordLogin(string appKey)
我创建了一个请求模型class:
public class PostLoginTelemetryRequest{
public string appKey {get;set;}
}
然后修改签名:
public IHttpActionResult RecordLogin(PostLoginTelemetryRequest request)
一切正常(为什么它不能像 MVC5 web dev 这样的常规字符串,我不知道,但无论如何...)
(另请注意,我已经使用字符串方法从客户端尝试了每种格式:form-url-encode、原始正文等,所以我相当确定这不是调用格式问题) .
我很困惑...我有一个非常简单的 Web API 和控制器,如果我有一个 GET 请求,它工作正常,但如果我有一个 POST 请求,它会工作正常。
[RoutePrefix("api/telemetry/trial")]
public class LoginTelemetryController : ApiController
{
[Route("login")]
[HttpPost]
public IHttpActionResult RecordLogin(string appKey) {
using (var context = new Core.Data.CoreContext()) {
context.ActivityLogItems.Add(new Domain.Logging.ActivityLogItem()
{
ActivityType = "Trial.Login",
DateUtc = DateTime.UtcNow,
Key = new Guid(appKey)
});
context.SaveChanges();
}
return Ok();
}
当我 post 在 postman 中反对这个时,我得到:
{
"message": "No HTTP resource was found that matches the request URI 'http://localhost:47275/api/telemetry/trial/login'.",
"messageDetail": "No action was found on the controller 'LoginTelemetry' that matches the request."
}
如果我将其更改为 [HttpGet]
并将 appKey 作为查询字符串,一切都很好。
我的应用启动非常简单:
public void Configuration(IAppBuilder app)
{
log4net.Config.XmlConfigurator.Configure();
HttpConfiguration httpConfig = new HttpConfiguration();
httpConfig.MapHttpAttributeRoutes(); // <------ HERE
FilterConfig.RegisterHttpFilters(httpConfig.Filters);
LoggingConfig.RegisterHandlers(httpConfig.Services);
ConfigureOAuth(app);
ConfigureWebApi(httpConfig);
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
app.UseWebApi(httpConfig);
}
任何人都可以找出为什么找不到 POST 请求吗?谢谢
如果我取出字符串参数并将其替换为请求对象,它就可以工作...
而不是:public IHttpActionResult RecordLogin(string appKey)
我创建了一个请求模型class:
public class PostLoginTelemetryRequest{
public string appKey {get;set;}
}
然后修改签名:
public IHttpActionResult RecordLogin(PostLoginTelemetryRequest request)
一切正常(为什么它不能像 MVC5 web dev 这样的常规字符串,我不知道,但无论如何...)
(另请注意,我已经使用字符串方法从客户端尝试了每种格式:form-url-encode、原始正文等,所以我相当确定这不是调用格式问题) .