404 Rejected-By-UrlScan删除请求

时间:2017-07-03 05:37:55

标签: c# asp.net-web-api http-status-code-403 http-delete

在我的Web API上,我有一些[HttpGet]函数可以正常工作,但是[HttpDelete](在同一个控制器上)的函数不起作用,它会返回404错误。< / p>

[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错误404.0 - 未找到   详细的错误信息   模块IIS Web核心通知MapRequestHandler处理程序StaticFile

     

错误代码0x80070002

     

请求   网址https://www.example.com:443/Rejected-By-UrlScan?~/API/Users/DeleteUser/155

     

物理路径d:\ wr \ mySite \ example.com \ Rejected-By-UrlScan   登录方法匿名登录用户匿名

所有呼叫都使用OWIN身份验证和承载令牌进行身份验证。

同一页面上的工作电话示例:

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

是什么导致它?

2 个答案:

答案 0 :(得分:2)

如另一个post中所述,可能在IIS中配置了一个扩展名(UrlScan)来阻止DELETE请求。您可以在IIS上查看此扩展程序。

答案 1 :(得分:1)

尝试手动设置动词

MonadVerifier[A, F[_]: Monad] // no params needed

同时检查以确保

  • 您正在调用正确的路径。

  • 您没有与预期路线匹配的文件夹

此外,您的路线模板占位符需要与操作参数名称匹配

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