[英]AngularJS Put Returning 404
使用AngularJS的“ $ http.put”时,PUT请求出现404错误。
这是我相关的AngularJS代码:
/* toggles whether or not the link is disabled */
toggleLinkStatus: function (isActive, linkGUID) {
$http.put('/Explorer/Link/ToggleLinkStatus',
{
isActive: isActive,
linkGUID: linkGUID
}
);
}
和我相关的C#控制器代码:
[HttpPut]
public IHttpActionResult ToggleLinkStatus(Boolean isActive, Guid linkGUID)
{
return Ok();
}
还有我的WebApiConfig代码
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
/** define routes for Explorer API */
config.Routes.MapHttpRoute(
name: "ExplorerAPI",
routeTemplate: "Explorer/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
我在这里想念什么? 在呼叫的标题中,我可以看到数据正在请求有效负载中传递:
isActive: true
linkGUID: "b94badb3-2917-4129-9ae3-35d2a635f66d"
如果我使用POSTMAN进行普通查询字符串PUT,它将通过,但当我使用AngularJS时不会通过。
更新
这很有趣,如果我使用以下angularJS请求,它将通过:
/* toggles whether or not the link is disabled */
toggleLinkStatus: function (isActive, linkGUID) {
$http.put('/Explorer/Link/ToggleLinkStatus',
{
isActive: isActive,
linkGUID: linkGUID
},
{
params:
{
isActive: isActive,
linkGUID: linkGUID
}
}
);
}
它也适用于此:
/* toggles whether or not the link is disabled */
toggleLinkStatus: function (isActive, linkGUID) {
$http.put('/Explorer/Link/ToggleLinkStatus',
{
},
{
params:
{
isActive: isActive,
linkGUID: linkGUID
}
}
);
}
如果您成功使用GET(在浏览器地址栏中完成此操作)但未成功使用PUT,则说明您如何配置route / etc出现问题。我在代码段中看不到它的含义。您在这里,但是在配置路线方面肯定存在一些不对劲。 也许有一条较早的路线与犯规的GET相匹配。 这不是Angular的错。 您可以使用适用于Chrome的PostMan插件进行测试,它可以让您发送PUT / POST / DELETE以及GET,然后您可以查看结果。
尝试将控制器操作更改为使用类而不是原始数据类型。 MVC尝试从URI而不是请求正文中读取这些内容。
像这样:
[HttpPut]
public IHttpActionResult ToggleLinkStatus(RequestModel model)
{
// model.IsActive ...
return Ok();
}
public class RequestModel {
bool IsActive {get;set;}
Guid LinkGuid {get;set;}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.