将操作命名为 Get... 使其成为 HttpGet,而不管 HttpPostAttribute。我如何强制它成为 HttpPost?

Naming an action Get... makes it a HttpGet, in spite of HttpPostAttribute. How do I force it to be HttpPost?

我的控制器中有以下代码,基于 ApiController。 (插入到 VS2013 MVC 模板化项目中)。

如果我将操作命名为 GetUniquePoSId,则无法使用 POST 调用它。将名称更改为 FetchUniquePoSId 使其成为可能。

我想 select 我的动作可以自由命名;谁知道如何禁用此行为?

谢谢, 安德斯,丹麦

        [System.Web.Mvc.HttpPost]
        public HttpResponseMessage FetchUniquePoSId([FromBody]JToken token)
        {
            var validationMessage = _jsonValidator.Validate(token, new string[] { "MerchantId" });

            if (validationMessage.ValidationResult != ValidationResultEnum.Ok)
                return MpBadRequest(validationMessage);

            // Otherwise OK.
            return Request.CreateResponse<JToken>(JToken.Parse("{'MobilePayPosId': 'A1234567-3AEA-4069-A2DD-123456789012'}"));
        }

问题是您在 Web api 项目中使用 System.Web.Mvc 命名空间的 HttpPost 属性,这就是它对您不起作用的原因(System.Web.Mvc命名空间只能由 asp.net mvc 控制器使用。

您应该使用用于 Web api 项目的 System.Web.Http 命名空间。

[System.Web.Http.HttpPost]
public HttpResponseMessage FetchUniquePoSId([FromBody]JToken token)
{
    //handling request
}