c# - 重定向后 HttpPost 到 ReturnURL

标签 c# asp.net-mvc http-post returnurl

我正在编写一个 ASP.NET MVC 2.0 应用程序,该应用程序要求用户在对商品出价之前先登录。我正在使用 actionfilter 来确保用户已登录,如果没有登录,则将他们发送到登录页面并设置返回 url。下面是我在 Action 过滤器中使用的代码。

if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
{
    filterContext.Result = new RedirectResult(String.Concat("~/Account/LogOn","?ReturnUrl=",filterContext.HttpContext.Request.RawUrl));
    return;
}

在我的登录 Controller 中,我验证用户凭据然后登录并重定向到返回 url

FormsAuth.SignIn(userName, rememberMe);
if (!String.IsNullOrEmpty(returnUrl))
{
    return Redirect(returnUrl);
}

我的问题是,这将始终使用 Get (HttpGet) 请求,而我的原始提交是一个帖子 (HttpPost),并且应该始终是一个帖子。谁能建议一种传递此 URL 的方法,包括 HttpMethod 或任何解决方法以确保使用正确的 HttpMethod?

最佳答案

没有简单的方法可以做到这一点。我建议您将未经身份验证的用户重定向到登录页面,而不是在发布到某个 URL 时,而是在请求将 POST 到经过身份验证的 URL 的表单时。

如果您知道您呈现给未经身份验证的用户的表单将 POST 到站点的经过身份验证的部分,那么请不要向他呈现该表单。当请求此表单时,只需重定向到登录页面进行身份验证,一旦通过身份验证,就重定向到原始表单。这样您将确保只有经过身份验证的用户才能发布到 protected 资源。

就自动 POST 请求(机器人、Web 服务等)而言,向不提供凭据的请求返回一个简单的 401 状态代码应该绰绰有余。

关于c# - 重定向后 HttpPost 到 ReturnURL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2939911/

相关文章:

javascript - jquery提示保存数据onbeforeunload

Android 的 HttpPost。将数据发送到 PHP 服务器上的表单

c# - DataGridViewComboBoxCell 的奇怪问题,试图自动提交更改

c# - 如何调试NuGet包的install.ps1脚本

c# - Microsoft Azure 服务总线超时异常

asp.net - 如何在 ASP.NET MVC 中实现 Disqus?

c# - 是否有自动捕获属性自分配的方法?

c# - 如何实现返回类型为 Task<T> 的方法

php - 使用 cURL 发送原始二进制文件和数据

Node.js - 简单的 Restify POST Mocha 测试失败