我有一个web api POST方法,当我发布成功保存的消息对象时,它会在http响应消息中返回一个位置标头。 Post方法如下:
public class MessagesController : ApiController
{
public HttpResponseMessage Post(Message message)
{
HttpResponseMessage result = new HttpResponseMessage();
if (ModelState.IsValid)
{
// code to save message in database
...
result = Request.CreateResponse(HttpStatusCode.Created);
result.Headers.Location = new Uri(Request.RequestUri, "messages/" + message.Id.ToString());
}
else
{
result = Request.CreateResponse(HttpStatusCode.BadRequest, GetErrorMessages());
}
return result;
}
private IEnumerable<string> GetErrorMessages()
{
return ModelState.Values.SelectMany(x => x.Errors.Select(e => e.ErrorMessage));
}
}
在我的角度服务中,我使用$ resource服务发出POST请求,如下所示:
myApp.factory("messageRepository", ['$resource', function ($resource) {
return {
save: function(message) {
return $resource('/api/messages').save(message);
}
};
}]);
在我的角度控制器中,我调用了我的角度服务的save方法,并使用$ promise.then()来检查成功和错误:
myApp.controller('MessageController', ['$scope', 'messageRepository', '$location', '$timeout',
function ($scope, messageRepository, $location, $timeout) {
$scope.errors = [];
$scope.save = function (message) {
$scope.sendingdata = true;
accountRepository.save(message).$promise.then(
// handle success
function (data) {
},
// handle error
function (response) {
$scope.errors = response.data;
});
};
}])
如何在控制器的成功处理函数中访问响应位置标题?
答案 0 :(得分:0)
您需要将成功函数传递给将方头作为参数的save方法。试试这个:
myApp.factory("messageRepository", ['$resource', function ($resource) {
return {
save: function(message) {
return $resource('/api/messages').save(message, function(value, responseHeaders) {
return responseHeaders().Location;
});
}
};
}]);