CR Feedback
This commit is contained in:
parent
37f4e2efaa
commit
d2386d7ded
|
|
@ -18,6 +18,7 @@ namespace MvcSample.Web
|
||||||
|
|
||||||
public string Get()
|
public string Get()
|
||||||
{
|
{
|
||||||
|
// Creates a url like: http://localhost:58195/Home/Details#CoolBeans!
|
||||||
return Url.RouteUrl(new { controller = "Home", action = "Details" }, protocol: "http", host: null, fragment: "CoolBeans!");
|
return Url.RouteUrl(new { controller = "Home", action = "Details" }, protocol: "http", host: null, fragment: "CoolBeans!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@ namespace Microsoft.AspNet.Mvc
|
||||||
valuesDictionary["controller"] = controller;
|
valuesDictionary["controller"] = controller;
|
||||||
}
|
}
|
||||||
|
|
||||||
var path = RouteCore(valuesDictionary);
|
var path = GeneratePathFromRoute(valuesDictionary);
|
||||||
if (path == null)
|
if (path == null)
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
|
|
@ -55,7 +55,7 @@ namespace Microsoft.AspNet.Mvc
|
||||||
|
|
||||||
public string RouteUrl(object values, string protocol, string host, string fragment)
|
public string RouteUrl(object values, string protocol, string host, string fragment)
|
||||||
{
|
{
|
||||||
var path = RouteCore(new RouteValueDictionary(values));
|
var path = GeneratePathFromRoute(new RouteValueDictionary(values));
|
||||||
if (path == null)
|
if (path == null)
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
|
|
@ -64,24 +64,19 @@ namespace Microsoft.AspNet.Mvc
|
||||||
return GenerateUrl(protocol, host, path, fragment);
|
return GenerateUrl(protocol, host, path, fragment);
|
||||||
}
|
}
|
||||||
|
|
||||||
private string RouteCore(IDictionary<string, object> values)
|
private string GeneratePathFromRoute(IDictionary<string, object> values)
|
||||||
{
|
{
|
||||||
var context = new VirtualPathContext(_httpContext, _ambientValues, values);
|
var context = new VirtualPathContext(_httpContext, _ambientValues, values);
|
||||||
|
|
||||||
var path = _router.GetVirtualPath(context);
|
var path = _router.GetVirtualPath(context);
|
||||||
|
|
||||||
// See Routing Issue#31
|
// See Routing Issue#31
|
||||||
PathString pathString;
|
|
||||||
if (path.Length > 0 && !path.StartsWith("/", StringComparison.Ordinal))
|
if (path.Length > 0 && !path.StartsWith("/", StringComparison.Ordinal))
|
||||||
{
|
{
|
||||||
pathString = new PathString("/" + path);
|
path = "/" + path;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
pathString = new PathString(path);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return _httpContext.Request.PathBase.Add(pathString).Value;
|
return _httpContext.Request.PathBase.Add(new PathString(path)).Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public string Content([NotNull] string contentPath)
|
public string Content([NotNull] string contentPath)
|
||||||
|
|
@ -102,23 +97,35 @@ namespace Microsoft.AspNet.Mvc
|
||||||
|
|
||||||
private string GenerateUrl(string protocol, string host, string path, string fragment)
|
private string GenerateUrl(string protocol, string host, string path, string fragment)
|
||||||
{
|
{
|
||||||
|
// We should have a robust and centrallized version of this code. See HttpAbstractions#28
|
||||||
|
|
||||||
Contract.Assert(path != null);
|
Contract.Assert(path != null);
|
||||||
|
|
||||||
var url = path;
|
var url = path;
|
||||||
if (!string.IsNullOrEmpty(fragment))
|
if (!string.IsNullOrEmpty(fragment))
|
||||||
{
|
{
|
||||||
url = url + "#" + fragment;
|
url += "#" + fragment;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(protocol) || !string.IsNullOrEmpty(host))
|
if (string.IsNullOrEmpty(protocol) && string.IsNullOrEmpty(host))
|
||||||
|
{
|
||||||
|
// We're returning a partial url (just path + query + fragment), but we still want it
|
||||||
|
// to be rooted.
|
||||||
|
if (!url.StartsWith("/", StringComparison.Ordinal))
|
||||||
|
{
|
||||||
|
url = "/" + url;
|
||||||
|
}
|
||||||
|
|
||||||
|
return url;
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
protocol = string.IsNullOrEmpty(protocol) ? "http" : protocol;
|
protocol = string.IsNullOrEmpty(protocol) ? "http" : protocol;
|
||||||
host = string.IsNullOrEmpty(host) ? _httpContext.Request.Host.Value : host;
|
host = string.IsNullOrEmpty(host) ? _httpContext.Request.Host.Value : host;
|
||||||
|
|
||||||
url = protocol + "://" + host + url;
|
url = protocol + "://" + host + url;
|
||||||
|
return url;
|
||||||
}
|
}
|
||||||
|
|
||||||
return url;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue