Asp.net web api WebAPI重定向不工作?

Asp.net web api WebAPI重定向不工作?,asp.net-web-api,Asp.net Web Api,我正在尝试以下方法: [System.Web.Http.AcceptVerbs("PUT")] public HttpResponseMessage MakePost(PostDto post) { try { var response = Request.CreateResponse(HttpStatusCode.Redirect); // tried MOVED too response.Headers.Locati

我正在尝试以下方法:

   [System.Web.Http.AcceptVerbs("PUT")]
   public HttpResponseMessage MakePost(PostDto post) {
        try {
            var response = Request.CreateResponse(HttpStatusCode.Redirect); // tried MOVED too
            response.Headers.Location = new Uri("google.com");
            return response;
        } catch (Exception e) {
            ErrorSignal.FromCurrentContext().Raise(e);
            return Request.CreateResponse(HttpStatusCode.InternalServerError, e);
        }
    }
这似乎是部分工作-当调用它时,我在chrome调试器中看到POST请求。Response选项卡中没有显示任何内容,但随后我看到一个GET请求被发送到新URI,但页面从未更改,我的AJAX调用抛出一个错误:

var options = {
        url: postUrl,
        type: type,
        dataType: 'json',
        xhrFields: {
            withCredentials: true
        }
    };
return $.ajax(options)
        .done(function (response) {
            // do stuff
        })
        .fail(function (response) {
            alert('error) // this gets hit - shouldn't the browser have redirected at this point?
        }).complete(function () {
            // stuff
        });
};
如果我检查响应,我会看到状态200“OK”。。。。我很困惑


我做错了什么?

发生这种情况是因为发出AJAX请求的代码遵循重定向,而不是浏览器。这将失败,因为AJAX请求尝试访问不同的域。如果要重定向浏览器,应该返回一些JSON结果或自定义HTTP头,在jQuery中手动获取这些结果,然后在那里执行重定向

在控制器中:

var response = new HttpResponseMessage(HttpStatusCode.OK);
response.Headers.Add("FORCE_REDIRECT", "http://google.com");
然后将成功回调添加到AJAX调用中:

success: function(data, textStatus, jqXHR) {
    if (jqXHR.getResponseHeader('FORCE_REDIRECT') !== null){
        window.location = jqXHR.getResponseHeader('FORCE_REDIRECT');
        return;
    }
}

过去,我将控制器结果包装在自定义操作结果类中以供重用。

您对重定向的期望可能是错误的。。。重定向只是302响应,浏览器将其视为“在返回AJAX请求之前,现在转到该页面”。由于重定向是跨域的,所以无法读取结果…谢谢Ant。直接将URL粘贴到响应中,而不是使用自定义标头,有什么问题吗?没有-我知道这方面没有约定,所以我选择了一个自定义标头,因为它似乎是合适的。可以从服务器发送一些其他标志,然后在客户端重定向到URL。不设置响应头有什么问题。@irfanMunir在正文中而不是在头中发送标志没有什么问题;我只是倾向于在标题中这样做,因为我觉得重定向指令实际上是“响应元数据”,所以这就是它的归属。