404 Rejected-by-UrlScan删除请求
在我的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);
}
能有什么原因呢?
尝试设置动词手动
<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
}
我尝试了两个,仍然得到相同的错误。 – user3378165
取决于你的IIS版本你应该看看这个问题https://*.com/questions/10906411/asp-net-web-api-put-delete-verbs-not-allowed-iis-8 – Nkosi
IIS版本是7.5,我看到这个问题,并尝试了所有建议,但没有成功,该网站是在共享服务器上,所以它是有点难以访问它。 – user3378165
您是否可以像其定义一样包含更多的控制器,以及它是否具有任何属性。发送失败请求时也显示原始响应。 – Nkosi
您是否在发送请求时进行身份验证?通知控制器标有'[Authorize]'属性 – Nkosi
显示在生产中工作的一个呼叫 – Nkosi