Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Response.Redirect如何计算“的URL?”~/folder1/folder2/some.aspx“;_C#_.net_Asp.net_Api_Uri - Fatal编程技术网

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完全隐藏在秘密中,这真的是毫无意义的。