测试网址和广告的最佳方式是什么?查询字符串有效吗?例如,在登录重定向后,我想确保目标URL有效。如果没有,请转到默认页面。
我们似乎遇到了查询字符串的问题,从“ReturnUrl =”开始,被复制并引发异常。我们宁愿让它进入默认页面。
答案 0 :(得分:1)
这是一个太长ReturnUrl
个查询字符串参数的解决方法。事实是,如果在追加新的RedirectUrl
参数之前在查询字符串中存在某些内容(例如,通过使用FormsAuthentication.RedirectToLoginPage
方法),则会对其进行编码并将其分配给新的RedirectUrl
参数。
这个想法是从查询字符串中删除不必要的(旧ReturnUrl
参数)。为此,我在Application_EndRequest
和global.asax
属性中使用了Response.RedirectLocation
。
因此,如果重定向响应并且当前网址包含ReturnUrl
参数,则应将其从重定向位置移除(因为它没有意义)。
// parameter key
private static readonly string ReturnUrlParameter = "ReturnUrl";
protected void Application_EndRequest(object sender, EventArgs e)
{
if (Response.IsRequestBeingRedirected)
{
Uri redirectUrl;
if (Uri.TryCreate(Response.RedirectLocation, UriKind.RelativeOrAbsolute, out redirectUrl))
{
redirectUrl = MakeAbsoluteUriIfNecessary(redirectUrl);
Uri currentUrl = Request.Url;
var currentQueryParameters =
HttpUtility.ParseQueryString(HttpUtility.UrlDecode(currentUrl.Query));
// the parameter is present in the current url already
if (currentQueryParameters[ReturnUrlParameter] != null)
{
UriBuilder builder = new UriBuilder(redirectUrl);
builder.Query =
HttpUtility.UrlDecode(builder.Query)
.Replace(Request.Url.Query, string.Empty).TrimStart('?');
Response.RedirectLocation =
Request.Url.MakeRelativeUri(builder.Uri).ToString();
}
}
}
}
private Uri MakeAbsoluteUriIfNecessary(Uri url)
{
if (url.IsAbsoluteUri)
{
return url;
}
else
{
Uri currentUrl = Request.Url;
UriBuilder builder = new UriBuilder(
currentUrl.Scheme,
currentUrl.Host,
currentUrl.Port
);
return new Uri(builder.Uri, url);
}
}
对于URL解析和构建System.Uri
将是最佳选择。
URI是a的紧凑表示 您的应用程序可用的资源 在Intranet或Internet上。乌里 class定义属性和 处理URI的方法,包括 解析,比较和组合。该 Uri类属性是只读的;至 创建一个可修改的对象,使用 UriBuilder课程。
答案 1 :(得分:0)
我想你可以提取URL,对其进行解码,然后将其加载到“Uri”类型中。这会告诉你它是否结构合理。