当前位置: 首页 > 知识库问答 >
问题:

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

咸亦
2023-03-14

我有一个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方法,但它说请求的资源不支持超文本传输协议方法'GET'有人知道为什么吗?

{状态代码:405,原因短语:“不允许使用方法”,版本:1.0,内容:System.Net.Http.StreamContent,标题:{Pragma:no cache X-Powered-By-Plesk:PleskWin连接:close cache Control:no cache Date:Fri,2017年9月29日08:53:51 GMT服务器:Microsoft IIS/8.0 X-AspNet-Version: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应用程序。

共有3个答案

万嘉熙
2023-03-14

您在Web服务器上有权限问题。405超文本传输协议代码意味着不允许从您的Web服务器使用post方法。请确保您在发送请求时已通过身份验证,并确保您的请求包含一些用于身份验证的令牌。

刁浩言
2023-03-14

在我的web服务器的托管设置中,有一个属性首选域,我将其更改为“无”,然后它正常工作

吴凯泽
2023-03-14

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

 类似资料:
  • 任何一个得到这种类型的问题后更新。我得到了这个错误后的新应用程序上传也。 您上载了一个使用密钥签名的APK,该密钥也用于对交付给用户的APK进行签名。因为您已注册应用程序签名,所以在上载APK之前,您应该使用新密钥对其进行签名。

  • 我在发帖到我的WebAPI时遇到了麻烦。 因此,即使我为内容类型指定了application/json,它仍然被理解为multipart/form-data 如果将vue.js代码切换为使用“var data={'value':'test'}”,并从.NET Post参数中删除[FromBody]属性,则会收到以下405“method Not alloved”错误: {“消息”:“请求的资源不支持

  • 我是个新手,我试着发布我的应用程序。 颤振正在调试模式下构建apk } 当我把它改成这样的版本 } 它是这样显示的 PS C:\用户\Ravi\FlutterProjects\ticrectoe 正在运行Gradle任务'assembleRelase'...失败:构建失败,有一个异常。正在运行Gradle任务'assembleRelase'... 正在运行Gradle任务'assembleRela

  • 据我所知,在APK下的google开发者控制台中有一个名为“UNPUBLISH”的选项。 在添加ManageAPK之后,google实际上删除了对APK的访问。 不幸的是,我在生产中上传了APK而不是BETA版,我需要删除/取消发布该应用程序。 我怎么能做到呢? 解决这个问题的最佳流程是什么。 我检查了所有与我的问题类似的问题,但所有答案都过时了,因为古尔奇添加了Manage APK来代替APK。

  • 我有一个android的设备,我在上面调试应用程序。在我生成签名apk后,我卸载了现有的调试应用程序,尝试安装签名apk,但我得到了应用程序未安装的错误。我安装在一个没有调试应用程序安装的新设备上,看起来还可以。我尝试清除应用程序数据并卸载,但没有工作。 图像错误