gpt4 book ai didi

c# - 从 MVC3 中的查询字符串中删除一个值并重定向到生成的 URL

转载 作者:可可西里 更新时间:2023-11-01 09:11:13 25 4
gpt4 key购买 nike

我正在处理一个看似简单的问题:在我的授权过滤器中,如果不满足其中一个条件,我会检查一些事情,我需要从查询字符串中删除某些值并将用户重定向到结果 URL。但是,这给我带来了比我想要的更多的问题。它看起来像这样:

public void OnAuthorization(AuthorizationContext filterContext)
{
if (!SomeCondition()) {
RedirectToCleanUrl(filterContext);
}
}

在我的 RedirectToCleanUrl 中,我正在剥离查询字符串并尝试将它们重定向到新的 url。它看起来像这样:

private void RedirectToCleanUrl(AuthorizationContext filterContext)
{
var queryStringParams = new NameValueCollection(filterContext.HttpContext.Request.QueryString);

// Stripping the key
queryStringParams.Remove("some_key");

var routeValueDictionary = new RouteValueDictionary();

foreach (string x in queryStringParams)
{
routeValueDictionary.Add(x, queryStringParams[x]);
}

foreach (var x in filterContext.RouteData.Values)
{
routeValueDictionary.Add(x.Key, x.Value);
}

filterContext.Result = new RedirectToRouteResult(routeValueDictionary);
}

首先,它不起作用,即使它起作用了,它也很难看。一定有更好的方法,对吧?我在这里缺少什么?

最佳答案

这是我最终编写的代码:

protected void StripQueryStringAndRedirect(System.Web.HttpContextBase httpContext, string[] keysToRemove)
{
var queryString = new NameValueCollection(httpContext.Request.QueryString);

foreach (var key in keysToRemove)
{
queryString.Remove(key);
}

var newQueryString = "";

for (var i = 0; i < queryString.Count; i++)
{
if (i > 0) newQueryString += "&";
newQueryString += queryString.GetKey(i) + "=" + queryString[i];
}

var newPath = httpContext.Request.Path + (!String.IsNullOrEmpty(newQueryString) ? "?" + newQueryString : String.Empty);

if (httpContext.Request.Url.PathAndQuery != newPath)
{
httpContext.Response.Redirect(newPath, true);
}
}

您可能还想对查询字符串参数进行 UrlEncode,但我会把它留给您。

关于c# - 从 MVC3 中的查询字符串中删除一个值并重定向到生成的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9187378/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com