我在我的asp.net mvc 3 web应用程序中使用post / redirect / get模式。通常,如果您提交触发验证的POST,则会获得302重定向回原始页面,因此用户可以更正其表单输入并重新提交。
但是如果你想在POST上返回401,会发生什么情况,因为用户没有足够的权限来POST到该资源?返回401状态代码很容易,但我无法重定向回原始页面。如果用户刷新页面,他们会得到“浏览器需要重新发送您之前提交的信息”提示,这就是做post / redirect / get的全部内容
我最好不要尝试返回正确的401状态代码,只是坚持所有POST的典型302重定向?
答案 0 :(得分:2)
您可以在回复中追加Location
标题,例如:
HttpContext.Current.Headers['Location'] = 'http://www.gohereinstead.com/';
但是我不确定每个浏览器如何将这个解释为401状态代码。
修改强>
嗯,仔细观察一下规范后,我认为不可能重定向一个POST,其中:如果收到301状态代码以响应除以外的请求 GET或HEAD,用户代理不得自动重定向 除非可以由用户确认,否则请求,因为这可能 改变发出请求的条件。
Note: When automatically redirecting a POST request after receiving a 301 status code, some existing HTTP/1.0 user agents will erroneously change it into a GET request.