【问题标题】:Response.Redirect with POST method in custom HttpModuleResponse.Redirect 在自定义 HttpModule 中使用 POST 方法
【发布时间】:2019-11-18 09:28:27
【问题描述】:

我有一个带有 web.api 的 asp.net 网站(“/v”),它基于请求中的 cookie 必须重定向到另一个站点(“/v2”)。

所以如果有cookie,请求必须重定向到“/v2/api...”,如果没有cookie,请求必须继续到“/v/api/...”

所以我实现了一个自定义 HttpModule 来完成重定向请求的任务,但即使请求是 POST 方法,重定向也始终使用 GET。

如何用正确的方法重定向请求?

下面的示例代码。

提前致谢

using System;
using System.Web;
using System.Linq;

namespace Sample
{
    public class VersionModule : IHttpModule
    {
        public void Init(HttpApplication context)
        {
            context.BeginRequest += OnContextBeginRequest;
        }

        private void OnContextBeginRequest(object sender, EventArgs e)
        {
            try
            {
                HttpApplication app = (HttpApplication)sender;

                if (app.Context.Request.Cookies.AllKeys.Contains("version"))
                {
                    string newUrl = @"https://sample.com/v";

                    var cookie = app.Context.Request.Cookies.Get("version");
                    if (!string.IsNullOrEmpty(cookie.Value))
                    {
                        if (cookie.Value == "2")
                        {
                            newUrl += "2";
                            string parameters = app.Context.Request.Url.PathAndQuery.Replace("v/", "");
                            newUrl = newUrl + parameters;

                            // this call alway a GET!! I need a POST method!
                            app.Context.Response.Redirect(newUrl, true);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
            }
        }

        public void Dispose()
        {
        }

    }
}

【问题讨论】:

  • 您无法重定向 POST。您可以返回一个将数据发布到其他网站的插页式页面,或者您的网站可以充当代理并直接发布。
  • 为了解决我的问题,我决定用 NGINX 创建一个反向代理,谢谢

标签: c# asp.net asp.net-mvc-4 asp.net-web-api


【解决方案1】:

在您的评论中,您声明“为了解决我的问题,我决定使用 NGINX 创建反向代理”。

作为替代方案,更符合您的原始问题...

您可以使用HTTP 307 Temporary Redirect,其中方法(在本例中为POST)和原始请求的主体被重用于执行重定向请求。

app.Context.Response.StatusCode = 307;
app.Context.Response.RedirectLocation = newUrl;
app.Context.Response.End();

【讨论】:

    猜你喜欢
    • 2010-11-23
    • 2021-07-29
    • 1970-01-01
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-12
    • 1970-01-01
    相关资源
    最近更新 更多