【发布时间】:2017-07-12 10:04:14
【问题描述】:
我有一个 Web API,可以完美地用于开发各种 HTTP 请求(在同一个控制器上),一旦我将它移到生产环境(共享服务器,我什至无权访问它)DELETE请求停止工作(其他工作正常),我收到 404 错误:
请求 URL https://www.example.com:443/Rejected-By-UrlScan~/API/Users/DeleteUser/1
物理路径 d:\xx\yy\example.com\Rejected-By-UrlScan
匿名登录方法
匿名登录用户
这是 web.config 的(一部分):
<system.web>
<customErrors mode="Off"/>
<authentication mode="None" />
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule" />
</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>
删除操作:
[Authorize]
[RoutePrefix("Users")]
public class UsersController : ApiController
{
[HttpDelete]
[Route("DeleteUser/{id:int}")]
public void Delete(int id)
{
_UsersRepository.Delete(id);
}
还有 AJAX 调用:
deleteUser = function (id, callback) {
$.ajax({
url: "../API/Users/DeleteUser/" + id,
type: "DELETE",
success: function () {
callback;
}
});
}
WebApiConfig.cs:
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Configure Web API to use only bearer token authentication.
config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
//create json formatter and remove all others
var jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().First();
jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
jsonFormatter.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented;
config.Formatters.Remove(config.Formatters.FormUrlEncodedFormatter);
config.Formatters.Remove(config.Formatters.XmlFormatter);
}
在同一控制器上的工作调用示例:
getUsers = function (callback) {
$.get("../API/Users/GetUsers/", callback);
}
还有行动:
[Route("GetUsers")]
public IEnumerable<User> GetUsers()
{
return _UsersRepository.GetUsers();
}
【问题讨论】:
-
虽然
UsersController有[Authorize],为什么你却匿名访问?它与 404 问题关系不大,但很奇怪。 -
@Youngjae 我正在使用
bearer token,我看到它在我的标题中正确设置,不知道为什么它有“匿名”。我认为404错误是因为@987654332 @ 导致 url 改变,但我不知道该怎么做,你知道吗? -
我不知道,但最好也发布您的
WebApiConfig.cs或Startup.cs。 -
@Youngjae 我发了,谢谢。
标签: asp.net-web-api