C# Response.Redirect如何计算“的URL?”~/folder1/folder2/some.aspx“;
这听起来可能是一个微不足道的问题,但出于某种原因,它不是 而不是需要重定向C# Response.Redirect如何计算“的URL?”~/folder1/folder2/some.aspx“;,c#,.net,asp.net,api,uri,C#,.net,Asp.net,Api,Uri,这听起来可能是一个微不足道的问题,但出于某种原因,它不是 而不是需要重定向 Response.Redirect("~/folder1/folder2/some.aspx") 我需要的位置就像它的行为 string navigatingUrl = Response.Redirect("~/folder1/folder2/some.aspx") 我开始尝试复制这个 string navigatingUrl = new Uri(HttpContext.Current.Request.Url,
Response.Redirect("~/folder1/folder2/some.aspx")
我需要的位置就像它的行为
string navigatingUrl = Response.Redirect("~/folder1/folder2/some.aspx")
我开始尝试复制这个
string navigatingUrl = new Uri(HttpContext.Current.Request.Url,
new Uri("~/folder1/folder2/some.aspx", UriKind.Relative));
而是生成”http://www.fullRequestUrl/~/folder1/folder2/some.aspx“
编辑:我已经找到了为什么我讨厌微软的URL API。我希望地狱之火属于编写这行代码的人
else if (uriKind == UriKind.Relative)
{
// Here we know that we can create an absolute Uri, but the user has requested
only a relative one
e = GetException(ParsingError.CannotCreateRelative);
}
什么会让一个人犯这样的错误呢?这个if语句完全破坏了API。我想您正在寻找。通常,您可能会使用页面对象上的方法(如果您使用的是WebForms)。我想您正在寻找。通常,您可能会使用页面对象上的方法(如果您使用的是WebForms)。唯一的绝对方法是:
string url = Request.Url.GetLeftPart(UriPartial.Authority)
+ VirtualPathUtility.ToAbsolute(relativePath)
要做到这一点,唯一绝对的方法是:
string url = Request.Url.GetLeftPart(UriPartial.Authority)
+ VirtualPathUtility.ToAbsolute(relativePath)
必须在与任何类型的控件都没有耦合的API内部使用(var c=new Control())url=c.ResolveUrl(input)编写
代码,这让人感觉非常不舒服。您使用的是WebForms吗?如果是这样,您可以始终为您的页面类创建一个IUrlResolver接口(需要ResolveUrl()方法),然后将页面传递到API中(使用该接口限制公开并允许轻松替换)。不幸的是,我认为唯一的选择将是同样丑陋的;也许最好的替代方法是编写自己的替换代码(检查Resolveter以了解ResolveUrl()方法的实现)。实际上,毫无意义.NET为何将url API完全隐藏在保密之中。必须使用(var c=new Control())url=c.ResolveUrl(input)编写代码会让人感觉非常不对劲
在与任何类型的控件都没有耦合的API内部。您使用的是WebForms吗?如果是这样,您可以始终为您的页面类创建一个IUrlResolver接口(需要ResolveUrl()方法),然后将页面传递到API中(使用该接口限制公开并允许轻松替换)。不幸的是,我认为唯一的选择将是同样丑陋的;也许最好的替代方法是编写自己的替换代码(检查Resolver以了解ResolveUrl()方法的实现情况)。对于.NET为何将url API完全隐藏在秘密中,这真的是毫无意义的。