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

Posted

技术标签:

【中文标题】发布 Web API 2 应用程序后的 HTTP 405 错误【英文标题】:HTTP 405 Errors after Publishing Web API 2 Applications 【发布时间】:2018-03-11 03:30:25 【问题描述】:

我有一个 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:'方法不允许',版本:1.0,内容:System.Net.Http.StreamContent,标题: Pragma:无缓存 X-Powered-By-Plesk:PleskWin 连接:关闭 缓存控制:无缓存 日期:格林威治标准时间 2017 年 9 月 29 日星期五 08:53:51 服务器:Microsoft-IIS/8.0 X-AspNet-版本:4.0.30319 X-Powered-By: ASP.NET 内容长度:72 允许:发布 内容类型:应用程序/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 应用程序。

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

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

【讨论】:

不,这个控制器是允许匿名的,如果这个原因造成问题,为什么我成功获得所有优势内容?

以上是关于发布 Web API 2 应用程序后的 HTTP 405 错误的主要内容,如果未能解决你的问题,请参考以下文章

Web API 2 - 阻止所有外部调用

调用 Web API 2 端点时出现 HTTP 415 不支持的媒体类型错误

使用 OWIN 身份从多个 API 客户端注册 Web API 2 外部登录

ASP.NET 4.5 Web API 2.0,JWT 消息处理程序将状态 0 返回到 Angular 7 HTTP 拦截器

ASP.NET Web API 2 入门教程

Web Api 2 Preflight CORS 请求承载令牌