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

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

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

错误一:

错误:404 (Not Found)

解决方案:

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

错误二:

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

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

webapi配置文件:

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

2.后端处理:

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

[HttpOptions]
public HttpResponseMessage Login()
{
return new HttpResponseMessage(HttpStatusCode.Accepted);
}
///
/// 用户登陆
///
///
///
[HttpPost]
public HttpResponseMessage Login([FromBody] LoginModel model)
{
var cache = HttpRuntime.Cache;
var user = cache.Get(model.Account) as UserModel;
if (user == null)
{
return Error(1, “用户未注册!”);
}
if (user.Password != model.Password)
{
return Error(1, “用户名或密码错误!”);
}
return Success(0, “登陆成功!”, user);
}

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

 protected void Application_BeginRequest(object sender, 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.NET\Framework\v4.0.30319\aspnet_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.NET\Framework64\v4.0.30319\aspnet_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.NET\Framework64\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="None" preCondition="classicMode,runtimeVersionv4.0,bitness64" />
             <add name="WebAPI_32bit" path="*" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="None" preCondition="classicMode,runtimeVersionv4.0,bitness32" />
  </handlers>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值