2017-07-03 63 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的这个扩展。