发布Web API 2应用程序后的HTTP 405错误

时间:2017-09-29 08:52:45

标签: c# asp.net asp.net-web-api2 http-method webapi2

我有一个Web Api控制器,我已经测试了localhost上的所有操作,但它运行良好。但是当我在Web服务器上发布它时,只有[HttpGet]的动作和[HttpPost]动作返回Http 405错误

public class ContentController : ApiController
{
    [HttpGet]
    public async Task<IHttpActionResult> AdvantageList()
    {
        //return ok 200
    }
    [HttpPost]
    public async Task<IHttpActionResult> SaveAdvantage(ContentModel model)
    {
        //return 405 
    }
}

我在客户端上使用了以下方法

var r = await ClientManager.Client.PostAsJsonAsync("api/Content/SaveAdvantage", Advantage);

但是它会在响应表单服务器下面重新启动。我使用了PostAsJsonAsync方法,但它说The requested resource does not support http method 'GET' 有人知道为什么吗?

  

{   StatusCode:405,ReasonPhrase:'Method Not Allowed',版本:1.0,内容:System.Net.Http.StreamContent,Headers:   {     Pragma:没有缓存     X-Powered-By-Plesk:PleskWin     连接:关闭     缓存控制:无缓存     日期:2017年9月29日星期五08:53:51 GMT     服务器:Microsoft-IIS / 8.0     X-AspNet-Version:4.0.30319     X-Powered-By:ASP.NET     内容长度:72     允许:POST     Content-Type:application / json;字符集= utf-8的     到期:-1   }}

  

“{\”message \“:\”请求的资源不支持http方法'GET'。\“}”

我在web api配置中有以下内容:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{action}");
        config.Routes.MapHttpRoute("WithId", "api/{controller}/{action}/{id}", new { id = RouteParameter.Optional });
        config.Routes.MapHttpRoute("TwoId", "api/{controller}/{action}/{id}/{id2}", new { id = RouteParameter.Optional, id2 = RouteParameter.Optional });

        config.MapHttpAttributeRoutes();

        var formatter = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
        formatter.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver();
    }
}

我在Web.config中有以下处理程序

<system.webServer>
<handlers>
  <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
  <remove name="OPTIONSVerbHandler" />
  <remove name="TRACEVerbHandler" />
  <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>

我在winform应用程序中使用此webapi2应用程序。

3 个答案:

答案 0 :(得分:0)

http错误代码告诉我们这是一个正确的问题。看看:https://fr.wikipedia.org/wiki/Liste_des_codes_HTTP

答案 1 :(得分:0)

在我的网络服务器托管设置中,有一个属性首选域,我将其更改为,之后它正常工作

Preferred Domain Setting

答案 2 :(得分:-1)

您在网络服务器上遇到了问题。 405 http代码表示不允许从您的Web服务器使用post方法。确保在发送请求时对您进行了身份验证,并确保您的请求包含一些用于身份验证的令牌。