Adding more overloads for IUrlHelper
(cherry picked from commit 4ebe6b5e386388914160b07c91142a9e7483134b)
This commit is contained in:
parent
931d18b851
commit
37f4e2efaa
|
|
@ -18,7 +18,7 @@ namespace MvcSample.Web
|
||||||
|
|
||||||
public string Get()
|
public string Get()
|
||||||
{
|
{
|
||||||
return Url.Route(new { controller = "Home", action = "Details" });
|
return Url.RouteUrl(new { controller = "Home", action = "Details" }, protocol: "http", host: null, fragment: "CoolBeans!");
|
||||||
}
|
}
|
||||||
|
|
||||||
public string Link1()
|
public string Link1()
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics.Contracts;
|
||||||
|
using System.Globalization;
|
||||||
using Microsoft.AspNet.Abstractions;
|
using Microsoft.AspNet.Abstractions;
|
||||||
using Microsoft.AspNet.DependencyInjection;
|
using Microsoft.AspNet.DependencyInjection;
|
||||||
using Microsoft.AspNet.Mvc.Rendering;
|
using Microsoft.AspNet.Mvc.Rendering;
|
||||||
|
|
@ -20,7 +22,7 @@ namespace Microsoft.AspNet.Mvc
|
||||||
_ambientValues = contextAccessor.Value.RouteValues;
|
_ambientValues = contextAccessor.Value.RouteValues;
|
||||||
}
|
}
|
||||||
|
|
||||||
public string Action(string action, string controller, object values)
|
public string Action(string action, string controller, object values, string protocol, string host, string fragment)
|
||||||
{
|
{
|
||||||
var valuesDictionary = values as IDictionary<string, object>;
|
var valuesDictionary = values as IDictionary<string, object>;
|
||||||
if (valuesDictionary == null)
|
if (valuesDictionary == null)
|
||||||
|
|
@ -42,22 +44,44 @@ namespace Microsoft.AspNet.Mvc
|
||||||
valuesDictionary["controller"] = controller;
|
valuesDictionary["controller"] = controller;
|
||||||
}
|
}
|
||||||
|
|
||||||
return RouteCore(valuesDictionary);
|
var path = RouteCore(valuesDictionary);
|
||||||
|
if (path == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return GenerateUrl(protocol, host, path, fragment);
|
||||||
}
|
}
|
||||||
|
|
||||||
public string Route(object values)
|
public string RouteUrl(object values, string protocol, string host, string fragment)
|
||||||
{
|
{
|
||||||
return RouteCore(new RouteValueDictionary(values));
|
var path = RouteCore(new RouteValueDictionary(values));
|
||||||
|
if (path == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return GenerateUrl(protocol, host, path, fragment);
|
||||||
}
|
}
|
||||||
|
|
||||||
private string RouteCore(IDictionary<string, object> values)
|
private string RouteCore(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);
|
||||||
|
|
||||||
// We need to add the host part in here, currently blocked on http abstractions support.
|
// See Routing Issue#31
|
||||||
// The intent is to use full URLs by default.
|
PathString pathString;
|
||||||
return _httpContext.Request.PathBase + path;
|
if (path.Length > 0 && !path.StartsWith("/", StringComparison.Ordinal))
|
||||||
|
{
|
||||||
|
pathString = new PathString("/" + path);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pathString = new PathString(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
return _httpContext.Request.PathBase.Add(pathString).Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public string Content([NotNull] string contentPath)
|
public string Content([NotNull] string contentPath)
|
||||||
|
|
@ -75,5 +99,26 @@ namespace Microsoft.AspNet.Mvc
|
||||||
}
|
}
|
||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private string GenerateUrl(string protocol, string host, string path, string fragment)
|
||||||
|
{
|
||||||
|
Contract.Assert(path != null);
|
||||||
|
|
||||||
|
var url = path;
|
||||||
|
if (!string.IsNullOrEmpty(fragment))
|
||||||
|
{
|
||||||
|
url = url + "#" + fragment;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(protocol) || !string.IsNullOrEmpty(host))
|
||||||
|
{
|
||||||
|
protocol = string.IsNullOrEmpty(protocol) ? "http" : protocol;
|
||||||
|
host = string.IsNullOrEmpty(host) ? _httpContext.Request.Host.Value : host;
|
||||||
|
|
||||||
|
url = protocol + "://" + host + url;
|
||||||
|
}
|
||||||
|
|
||||||
|
return url;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
namespace Microsoft.AspNet.Mvc.Rendering
|
namespace Microsoft.AspNet.Mvc
|
||||||
{
|
{
|
||||||
public interface IUrlHelper
|
public interface IUrlHelper
|
||||||
{
|
{
|
||||||
string Action(string action, string controller, object values);
|
string Action(string action, string controller, object values, string protocol, string host, string fragment);
|
||||||
|
|
||||||
string Route(object values);
|
|
||||||
|
|
||||||
string Content(string contentPath);
|
string Content(string contentPath);
|
||||||
|
|
||||||
|
string RouteUrl(object values, string protocol, string host, string fragment);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,25 +1,72 @@
|
||||||
namespace Microsoft.AspNet.Mvc.Rendering
|
namespace Microsoft.AspNet.Mvc
|
||||||
{
|
{
|
||||||
public static class UrlHelperExtensions
|
public static class UrlHelperExtensions
|
||||||
{
|
{
|
||||||
public static string Action([NotNull] this IUrlHelper generator)
|
public static string Action([NotNull] this IUrlHelper helper)
|
||||||
{
|
{
|
||||||
return generator.Action(action: null, controller: null, values: null);
|
return helper.Action(
|
||||||
|
action: null,
|
||||||
|
controller: null,
|
||||||
|
values: null,
|
||||||
|
protocol: null,
|
||||||
|
host: null,
|
||||||
|
fragment: null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string Action([NotNull] this IUrlHelper generator, string action)
|
public static string Action([NotNull] this IUrlHelper helper, string action)
|
||||||
{
|
{
|
||||||
return generator.Action(action: action, controller: null, values: null);
|
return helper.Action(action, controller: null, values: null, protocol: null, host: null, fragment: null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string Action([NotNull] this IUrlHelper generator, string action, object values)
|
public static string Action([NotNull] this IUrlHelper helper, string action, object values)
|
||||||
{
|
{
|
||||||
return generator.Action(action: action, controller: null, values: values);
|
return helper.Action(action, controller: null, values: values, protocol: null, host: null, fragment: null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string Action([NotNull] this IUrlHelper generator, string action, string controller)
|
public static string Action([NotNull] this IUrlHelper helper, string action, string controller)
|
||||||
{
|
{
|
||||||
return generator.Action(action: action, controller: controller, values: null);
|
return helper.Action(action, controller, values: null, protocol: null, host: null, fragment: null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string Action([NotNull] this IUrlHelper helper, string action, string controller, object values)
|
||||||
|
{
|
||||||
|
return helper.Action(action, controller, values, protocol: null, host: null, fragment: null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string Action(
|
||||||
|
[NotNull] this IUrlHelper helper,
|
||||||
|
string action,
|
||||||
|
string controller,
|
||||||
|
object values,
|
||||||
|
string protocol)
|
||||||
|
{
|
||||||
|
return helper.Action(action, controller, values, protocol, host: null, fragment: null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string Action(
|
||||||
|
[NotNull] this IUrlHelper helper,
|
||||||
|
string action,
|
||||||
|
string controller,
|
||||||
|
object values,
|
||||||
|
string protocol,
|
||||||
|
string host)
|
||||||
|
{
|
||||||
|
return helper.Action(action, controller, values, protocol, host, fragment: null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string RouteUrl([NotNull] this IUrlHelper helper, object values)
|
||||||
|
{
|
||||||
|
return helper.RouteUrl(values, protocol: null, host: null, fragment: null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string RouteUrl([NotNull] this IUrlHelper helper, object values, string protocol)
|
||||||
|
{
|
||||||
|
return helper.RouteUrl(values, protocol, host: null, fragment: null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string RouteUrl([NotNull] this IUrlHelper helper, object values, string protocol, string host)
|
||||||
|
{
|
||||||
|
return helper.RouteUrl(values, protocol, host, fragment: null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue