使用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 }
);
}
}
我在这里缺少什么?在调用的Headers中,我可以看到数据正在Request Payload中传递:
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
}
}
);
}
答案 0 :(得分:0)
如果您成功使用GET(在浏览器地址栏中执行此操作)但未成功使用PUT,那么您在配置路由/等方面出现了问题。我看不出它是什么你在这里的代码片段,但你如何配置你的路线肯定有些不对劲。也许有一条早期的路线与GET相匹配。这不是Angular的错。你可以使用Chrome的PostMan插件进行测试,它可以让你发送PUT / POST / DELETE以及GET,你可以看到结果。
答案 1 :(得分:0)
尝试更改控制器操作以使用类而不是原始数据类型。 MVC试图从URI而不是请求体中读取这些内容。
像这样:[HttpPut]
public IHttpActionResult ToggleLinkStatus(RequestModel model)
{
// model.IsActive ...
return Ok();
}
public class RequestModel {
bool IsActive {get;set;}
Guid LinkGuid {get;set;}
}