webapi發布常見錯誤及解決方案


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]
        public HttpResponseMessage Login()
        {
            return new HttpResponseMessage(HttpStatusCode.Accepted);
        }
        /// <summary>
        /// 用戶登陸
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        [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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM