[英]ASP.NET Web API - Ajax PUT - 405 Method Not Allowed (Entity Framework)
我正在尝试通过JSON通过JQuery的Ajax函数向使用JSON的ASP.NET Web API的用户提供更新。 我不断收到来自服务器的405 (Method not Allowed)
响应。 我已经尝试了几乎所有内容,包括在web.config中禁用WebDAV模块,以及向我的web.config中添加Access-Control-Allow-Origin
标头。
我使用了数据库优先方法,并使用了ADO模型和DbContext生成。 控制器也是由ASP.NET在创建时生成的。 我认为他们应该工作。
我尝试了PUT和POST都无济于事。 我不知道我在做什么错。
我的JS代码:
function UpdateUserLoginTime(user) {
$.getScript("src/js/datetimeutils.js");
var url = "http://foo.bar.com:8081/api/user/".concat(user.ID);
var current = CurrentDateTime();
$.ajax({
url: url,
type: 'PUT',
data: JSON.stringify({"LastLoginDate" : current}),
datatype: "json",
contentType: "application/json; charset=utf-8",
crossDomain: true,
success: function (data) {
alert('User login time updated sucessfully');
},
error: function () {
alert('Update login time error');
}
});
}
对于帖子,我也尝试了JSON.stringify(user)(在URL上没有concat(ID))。
这是我的ASP.NET控制器代码:
// PUT api/User/5
public HttpResponseMessage PutUser(string id, User user)
{
if (ModelState.IsValid && id == user.ID)
{
db.Entry(user).State = EntityState.Modified;
try
{
db.SaveChanges();
}
catch (DbUpdateConcurrencyException)
{
return Request.CreateResponse(HttpStatusCode.NotFound);
}
return Request.CreateResponse(HttpStatusCode.OK);
}
else
{
return Request.CreateResponse(HttpStatusCode.BadRequest);
}
}
// POST api/User
public HttpResponseMessage PostUser(User user)
{
if (ModelState.IsValid)
{
db.Users.Add(user);
db.SaveChanges();
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, user);
response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = user.CAC }));
return response;
}
else
{
return Request.CreateResponse(HttpStatusCode.BadRequest);
}
}
我的配置:
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule"/>
</modules>
<handlers>
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
</httpProtocol>
我的RouteConfig:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
您需要为Web API启用CORS,否则在发送请求时,总是会收到405不允许的响应。 看这个 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.