webapi发布常见错误及解决方案

摘要:
=model.Password){returnError(1,"用户名或密码错误!

webapi发布常见错误及解决方案

错误一:

错误:404 (Not Found)

解决方案:

在 <system.webServer>节点中添加如下模块:

<modules runAllManagedModulesForAllRequests="true" />

错误二:

错误:405 (Method Not Allowed)或者Response for preflight has invalid HTTP status code 405.

解决方案:(两个条件同时满足才可以)

webapi配置文件:

<modules runAllManagedModulesForAllRequests="true" />这个是核心,其他的都可以没有这个是必须的(但是安全方面考虑肯定是不可以的,然后通过如下方案方式解决)

2.后端处理:

第一种方案:在控制器中对应的方法都增加一个支持OPTIONS请求的方法,返回202即可;accepted就是202

[HttpOptions]
        publicHttpResponseMessage Login()
        {
            return newHttpResponseMessage(HttpStatusCode.Accepted);
        }
        /// <summary>
        ///用户登陆
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
[HttpPost]
        publicHttpResponseMessage Login([FromBody] LoginModel model)
        {
            var cache =HttpRuntime.Cache;
            var user = cache.Get(model.Account) asUserModel;
            if (user == null)
            {
                return Error(1, "用户未注册!");
            }
            if (user.Password !=model.Password)
            {
                return Error(1, "用户名或密码错误!");
            }
            return Success(0, "登陆成功!", user);
        }

第二种方案:在Global文件中增加如下这个方法:(推荐使用)

 protected void Application_BeginRequest(objectsender, EventArgs e)
        {
            var res =HttpContext.Current.Response;
            var req =HttpContext.Current.Request;

            //自定义header时进行处理
            if (req.HttpMethod == "OPTIONS")
            {
                //res.AppendHeader("Access-Control-Allow-Headers", "Content-Type, X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Date, X-Api-Version, X-File-Name,Token,Cookie,Authorization");
                //res.AppendHeader("Access-Control-Allow-Methods", "POST,GET,PUT,PATCH,DELETE,OPTIONS");
                res.StatusCode = 202;
                res.End();
            }
        }

如上如果不可以,可以尝试如下方案:

在 <system.webServer>节点中添加如下模块:

<modules runAllManagedModulesForAllRequests="true" />

-<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>

<modules runAllManagedModulesForAllRequests="true" />

<handlers>
<remove name="WebDAV" />
<remove name="WebAPI_64bit" />
<remove name="WebAPI_32bit" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="*" resourceType="Unspecified" requireAccess="Script" modules="IsapiModule" scriptProcessor="%windir%Microsoft.NETFrameworkv4.0.30319aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="*" resourceType="Unspecified" requireAccess="Script" modules="IsapiModule" scriptProcessor="%windir%Microsoft.NETFramework64v4.0.30319aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" resourceType="Unspecified" requireAccess="Script" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="WebAPI_64bit" path="*" verb="*" modules="IsapiModule" scriptProcessor="%windir%Microsoft.NETFramework64v4.0.30319aspnet_isapi.dll" resourceType="Unspecified" requireAccess="None" preCondition="classicMode,runtimeVersionv4.0,bitness64" />
<add name="WebAPI_32bit" path="*" verb="*" modules="IsapiModule" scriptProcessor="%windir%Microsoft.NETFrameworkv4.0.30319aspnet_isapi.dll" resourceType="Unspecified" requireAccess="None" preCondition="classicMode,runtimeVersionv4.0,bitness32" />
</handlers>

免责声明:文章转载自《webapi发布常见错误及解决方案》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ADB 常用命令树莓派系统备份及还原下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

WebAPI初探

WebAPI初探 由于即将要接手的新项目计划用ASP.NET MVC3来开发,所以最近一段时间一直在看相关的书或文章。因为之前在大学里也曾学习过MVC2开发,也做过几个简单的MVC2的小型测试项目,不过在后来工作以后主要还是开发WebForm的项目,所以MVC的东西也就逐渐的淡忘了。 经过这一段时间的系统学习,真的觉得MVC3相比于之前的MVC2还有Web...

第十八节:Asp.Net Core WebApi基础总结和请求方式

一. 基础总结 1.Restful服务改造   Core下的WebApi默认也是Restful格式服务,即通过请求方式(Get,post,put,delete)来区分请求哪个方法,请求的URL中不需要写方法名。 但是我们不喜欢这种方式,所以我们将默认的路由规则 [Route("api/[controller]")] 改为: [Route("api/[con...

visual studio 2015中的webapi生成helpPage,页面不显示方法说明问题解决

环境: vs2015、win7 参考:http://www.cnblogs.com/Erik_Xu/p/5638381.html 生成的help页面如下:,并没有显示控制器和方法。 原因是:新建项目时候没有勾选Web Api,webapi是后来添加的。缺少App_Start下的WebApiConfig.cs文件,如下。要显示Action,更改为 route...

Asp.net WebApi 项目示例(增删改查)

1.WebApi是什么     ASP.NET Web API 是一种框架,用于轻松构建可以由多种客户端(包括浏览器和移动设备)访问的 HTTP 服务。ASP.NET Web API 是一种用于在 .NET Framework 上构建 RESTful 应用程序的理想平台。     可以把WebApi看成Asp.Net项目类型中的一种,其他项目类型诸如我们熟...

将WebApi发布到IIS上(IIS6.0)(转)

关于“如何将ASP.NET-WebApi发布到IIS6.0上”的这方面的学习,一开始项目组长让我们接触的时候,我的心情是这样的 哇呜.jpg 当时真的是一脸懵逼啊,对于刚接触asp.net的菜鸟来说,这可真是一门技术活,没法啊,老大让做咱就干呗,好了,废话少说,直接上教程吧!经过几天的研究以及测试,发现并不是很难,难就难在细节上了,整个过程掌握后不到...

webapi-1 给现有MVC 项目添加 WebAPI

1. 增加一个WebApi Controller, VS 会自动添加相关的引用,主要有System.Web.Http,System.Web.Http.WebHost,System.Net.Http 2. 在App_Start 下创建 WebApiConfig.cs 并注册路由 using System; using System.Collections...