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、原始正文等,所以我相当确定这不是调用格式问题) .