2017-07-03 62 views
1

在我的Web API上我有幾個[HttpGet]函數可以很好地工作,但是在[HttpDelete](在同一個控制器上)的函數不起作用,它會返回404錯誤。404 Rejected-by-UrlScan刪除請求

[Authorize] 
[RoutePrefix("Users")] 
public class UsersController : ApiController 
{ 
    [HttpDelete] 
    [Route("DeleteUser/{ID}")] 
    public void Delete(int id) 
    { 
     _UserRepository.Delete(id); 
    } 
} 

在web.config中我有verb設置爲*

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"> 
     <remove name="WebDAVModule" /> 
     <remove name="FormsAuthentication" /> 
    </modules> 
    <handlers> 
     <remove name="WebDAV" /> 
     <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> 

的AJAX調用:

deleteUser = function (id, callback) { 
    $.ajax({ 
     url: "../../API/Users/DeleteUser/" + id, 
     type: "DELETE", 
     success: function() { 
      callback; 
     } 
    }); 
} 

錯誤:

HTTP Error 404.0 - Not Found Detailed Error Information Module IIS Web Core Notification MapRequestHandler Handler StaticFile

Error Code 0x80070002

Requested URL https://www.example.com:443/Rejected-By-UrlScan?~/API/Users/DeleteUser/155

Physical Path d:\wr\mySite\example.com\Rejected-By-UrlScan Logon Method Anonymous Logon User Anonymous

所有電話是認證的使用OWIN身份驗證和不記名令牌。

在同一頁上工作調用的例子:

getUsers = function (callback) { 
    $.get("../../API/Users/GetUsers/", callback); 
} 

能有什麼原因呢?

+0

您是否可以像其定義一樣包含更多的控制器,以及它是否具有任何屬性。發送失敗請求時也顯示原始響應。 – Nkosi

+0

您是否在發送請求時進行身份驗證?通知控制器標有'[Authorize]'屬性 – Nkosi

+0

顯示在生產中工作的一個呼叫 – Nkosi

回答

1

嘗試設置動詞手動

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"> 
     <remove name="WebDAVModule" /> 
     <remove name="FormsAuthentication" /> 
    </modules> 
    <handlers> 
     <remove name="WebDAV" /> 
     <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
     <remove name="OPTIONSVerbHandler" /> 
     <remove name="TRACEVerbHandler" /> 
     <add name="ExtensionlessUrlHandler-Integrated-4.0" 
      path="*." 
      verb="GET,HEAD,POST,DEBUG,DELETE,PUT" 
      type="System.Web.Handlers.TransferRequestHandler" 
      preCondition="integratedMode,runtimeVersionv4.0" /> 
    </handlers> 
    </system.webServer> 

還檢查以確保

  • 您呼叫的正確路徑。

  • 你沒有這樣的預期路線


而且相匹配的文件夾,你的路徑模板佔位需要匹配動作參數名稱

[Authorize] 
[RoutePrefix("Users")] 
public class UsersController : ApiController { 

    [HttpDelete] 
    [Route("DeleteUser/{id:int}")] //Matches DELETE {root}/Users/DeleteUser/5 
    [AcceptVerbs("DELETE")] 
    public IHttpActionResult Delete(int id) { 
     //TODO: check if {id} exists and if not, then return NotFound() 
     _UserRepository.Delete(id); 
     return Ok(); 
    } 

    //...other members 
} 
+0

我嘗試了兩個,仍然得到相同的錯誤。 – user3378165

+0

取決於你的IIS版本你應該看看這個問題https://stackoverflow.com/questions/10906411/asp-net-web-api-put-delete-verbs-not-allowed-iis-8 – Nkosi

+0

IIS版本是7.5,我看到這個問題,並嘗試了所有建議,但沒有成功,該網站是在共享服務器上,所以它是有點難以訪問它。 – user3378165

1

項記載另一個post,可能有在IIS中配置阻止DELETE請求的擴展名(UrlScan)。你可以檢查你的IIS的這個擴展。