在POST上返回401错误代码,但也重定向到引用页面

时间:2011-12-20 21:00:20

标签: asp.net-mvc-3 http-status-code-302 http-status-code-401 post-redirect-get

我在我的asp.net mvc 3 web应用程序中使用post / redirect / get模式。通常,如果您提交触发验证的POST,则会获得302重定向回原始页面,因此用户可以更正其表单输入并重新提交。

但是如果你想在POST上返回401,会发生什么情况,因为用户没有足够的权限来POST到该资源?返回401状态代码很容易,但我无法重定向回原始页面。如果用户刷新页面,他们会得到“浏览器需要重新发送您之前提交的信息”提示,这就是做post / redirect / get的全部内容

我最好不要尝试返回正确的401状态代码,只是坚持所有POST的典型302重定向?

1 个答案:

答案 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.