routes.MapRoute(
"Product",
"Product/{productId}",
defaults: new { controller = "Product", action = "Details" },
constraints: new { productId = @"\d+" });
| 约束 | 示例 | 说明 |
|---|---|---|
| required | "Product/{ProductName:required}" | 参数必选 |
| alpha | "Product/{ProductName:alpha}" | 匹配字母,大小写不限 |
| int | "Product/{ProductId:int}" | 匹配int类型 |
| long | "Product/{ProductId:long}" | 匹配long类型 |
| bool | "Product/{ProductId:bool}" | 匹配bool类型 |
| double | "Product/{ProductId:double}" | 匹配double类型 |
| float | "Product/{ProductId:float}" | 匹配float类型 |
| guid | "Product/{ProductId:guid}" | 匹配guid类型 |
| decimal | "Product/{ProductId:decimal}" | 匹配decimal类型 |
| datetime | "Search/{datetime:datetime}" | 匹配datetime类型 |
| composite | "Product/{ProductId:composite}" | 匹配composite类型 |
| length | "Product/{ProductName:length(5)}" | 长度必须是5个字符 |
| length | "Product/{ProductName:length(5, 10)}" | 长度在5-10个之间 |
| maxlength | "Product/{productId:maxlength(10)}" | 最大长度为10 |
| minlength | "Product/{productId:minlength(3)}" | 最小长度为3 |
| min | "Product/{ProductID:min(3)}" | 大于等于3 |
| max | "Product/{ProductID:max(10)}" | 小于等于10 |
| range | "Product/{ProductID:range(5, 10)}" | 对应的数组在5-10之间 |
| Regex | "Product/{productId:regex(^\d{4}$)}" | 符合指定的正则表达式 |
routes.MapRoute(
"Product",
"Product/{productId:long?}",
new { controller = "Product", action = "Details" });
routes.MapRoute(
"Product",
"Product/{productId:long=1000}",
new { controller = "Product", action = "Details" });
public void Configure(IApplicationBuilder app)
{
RouteCollection routes = new RouteCollection();
routes.Add(new TemplateRoute(new DebuggerRouteHandler("RouteHandlerA"), "", null));
routes.Add(new TemplateRoute(new DebuggerRouteHandler("RouteHandlerB"), "test/{a}/{b:int}", null));
routes.Add(new TemplateRoute(new DebuggerRouteHandler("RouteHandlerC"), "test2", null));
app.UseRouter(routes); // 开启Routing功能
}
public class DebuggerRouteHandler : IRouter
{
private string _name;
public DebuggerRouteHandler(string name)
{
_name = name;
}
public string GetVirtualPath(VirtualPathContext context)
{
throw new NotImplementedException();
}
public async Task RouteAsync(RouteContext context)
{
var routeValues = string.Join("", context.RouteData.Values);
var message = String.Format("{0} Values={1} ", _name, routeValues);
await context.HttpContext.Response.WriteAsync(message);
context.IsHandled = true;
}
}
正常:`http://localhost:5000/` 正常:`http://localhost:5000/test/yyy/12` 404 :`http://localhost:5000/test/yyy/s` 正常:`http://localhost:5000/test2` 404 :`http://localhost:5000/test3`
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
}
public void Configure(IApplicationBuilder app)
{
app.UseMvc(routeBuilder =>
{
routeBuilder.MapRoute(
name: "default",
template: "{controller}/{action}/{id?}",
defaults: new { controller = "Home", action = "Index" });
});
}
public class ProductsController : Controller
{
public IActionResult Index()
{
return Content("It Works with Controller Base Class!");
}
}
public class DemoController
{
public IActionResult Index()
{
return new ObjectResult("It Works without Controller Base Class!");
}
}
public class APIController
{
public object Index()
{
return new { Code = 100000, Data = "OK" };
}
}
public class ActionFilterTest : IActionFilter
{
public void OnActionExecuting(ActionExecutingContext context)
{
var typeName = context.Controller.GetType().FullName;
Console.WriteLine(typeName + "." + context.ActionDescriptor.Name + ":Start");
}
public void OnActionExecuted(ActionExecutedContext context)
{
var typeName = context.Controller.GetType().FullName;
Console.WriteLine(typeName + "." + context.ActionDescriptor.Name + ":END");
}
}
services.Configure<MvcOptions>(options =>
{
options.Filters.Add(typeof(ActionFilterTest));
});
RouterTest.ProductsController.Index:Start RouterTest.ProductsController.Index:End RouterTest.DemoController.Index:Start RouterTest.DemoController.Index:End RouterTest.APIController.Index:Start RouterTest.APIController.Index:End
public class PromoTemplateRoute : TemplateRoute
{
public PromoTemplateRoute(IRouter target, string routeTemplate, IInlineConstraintResolver inlineConstraintResolver)
: base(target, routeTemplate, inlineConstraintResolver: inlineConstraintResolver)
{
}
public PromoTemplateRoute(IRouter target,
string routeTemplate,
IDictionary<string, object> defaults,
IDictionary<string, object> constraints,
IDictionary<string, object> dataTokens,
IInlineConstraintResolver inlineConstraintResolver)
: base(target, routeTemplate, defaults, constraints, dataTokens, inlineConstraintResolver)
{
}
public PromoTemplateRoute(IRouter target,
string routeName,
string routeTemplate,
IDictionary<string, object> defaults,
IDictionary<string, object> constraints,
IDictionary<string, object> dataTokens,
IInlineConstraintResolver inlineConstraintResolver)
: base(target, routeName, routeTemplate, defaults, constraints, dataTokens, inlineConstraintResolver)
{ }
public async override Task RouteAsync(RouteContext context)
{
var requestPath = context.HttpContext.Request.Path.Value ?? string.Empty;
if (!requestPath.StartsWith("/promo", StringComparison.OrdinalIgnoreCase))
{
return;
}
await base.RouteAsync(context);
}
}
public static class RouteBuilderExtensions
{
public static IRouteBuilder MapPromoRoute(this IRouteBuilder routeCollectionBuilder, string name, string template)
{
MapPromoRoute(routeCollectionBuilder, name, template, defaults: null);
return routeCollectionBuilder;
}
public static IRouteBuilder MapPromoRoute(this IRouteBuilder routeCollectionBuilder, string name, string template, object defaults)
{
return MapPromoRoute(routeCollectionBuilder, name, template, defaults, constraints: null, dataTokens: null);
}
public static IRouteBuilder MapPromoRoute(this IRouteBuilder routeCollectionBuilder, string name, string template, object defaults, object constraints, object dataTokens)
{
var inlineConstraintResolver = routeCollectionBuilder.ServiceProvider.GetService<IInlineConstraintResolver>();
routeCollectionBuilder.Routes.Add(
new PromoTemplateRoute(
routeCollectionBuilder.DefaultHandler,
name,
template,
ObjectToDictionary(defaults),
ObjectToDictionary(constraints),
ObjectToDictionary(dataTokens),
inlineConstraintResolver));
return routeCollectionBuilder;
}
private static IDictionary<string, object> ObjectToDictionary(object value)
{
var dictionary = value as IDictionary<string, object>;
if (dictionary != null)
{
return dictionary;
}
return new RouteValueDictionary(value);
}
}
routes.MapPromoRoute(
name: "default2",
template: "promo/{controller}/{action}/{id?}",
defaults: new { controller = "Home", action = "Index" });
[Route("bookhome")]
public class HomeController : Controller
{
public IActionResult Index()
{
return View();
}
[Route("about")]
public IActionResult About()
{
ViewBag.Message = "Your application description page.";
return View();
}
[Route("contactus")]
public IActionResult Contact()
{
ViewBag.Message = "Your contact page.";
return View();
}
}
/bookhome /bookhome/about /bookhome/contactus
[Route("products/{productId:int}")]
[Route("book/[controller]/[action]")]
[HttpGet("products/{productId:int}")]
[Route("book")]
public class HomeController : Controller
{
public IActionResult Index()
{
return View();
}
public IActionResult About()
{
ViewBag.Message = "Your application description page.";
return View();
}
}
[Route("book")]
public class HomeController : Controller
{
public IActionResult Index()
{
return View();
}
[Route("about")]
public IActionResult About()
{
ViewBag.Message = "Your application description page.";
return View();
}
}
[Route("book")]
public class HomeController : Controller
{
[Route("index")]
public IActionResult Index()
{
return View();
}
[Route("about")]
public IActionResult About()
{
ViewBag.Message = "Your application description page.";
return View();
}
public IActionResult Contact()
{
ViewBag.Message = "Your contact page.";
return View();
}
}
[Route("book")]
public class HomeController : Controller
{
[Route("Contact")]
[HttpGet("home/Contact2")]
public IActionResult Contact()
{
ViewBag.Message = "Your contact page.";
return View();
}
}
[Route("Contact")]
[HttpPost("home/Contact2")]
[HttpGet("Contact")]
[HttpPost("home/Contact2")]
[Route("book")]
[Route("tom")]
public class HomeController : Controller
{
[Route("Contact")]
[Route("ContactUS")]
[HttpPost("home/Contact2")]
public IActionResult Contact()
{
ViewBag.Message = "Your contact page.";
return View();
}
}
GET:/book/contact GET:/book/contactus GET:/tom/contact GET:/tom/contactus POST:/book/home/contact2 POST:/tom/home/contact2
[Route("book", Order = 1)]
[Route("tom", Order = 0)]
public class HomeController : Controller
{
[Route("Contact", Order = 1)]
[Route("ContactUS", Order = 0)]
[HttpPost("home/Contact2", Order = 2)]
public IActionResult Contact()
{
ViewBag.Message = "Your contact page.";
return View();
}
}
[Route("index/{productId:aabbcc}")]
public class AABBCCRouteConstraint : IRouteConstraint
{
public bool Match(HttpContext httpContext, IRouter route, string routeKey, IDictionary<string, object> values, RouteDirection routeDirection)
{
bool b = false;
object value;
if (values.TryGetValue(routeKey, out value) && value != null)
{
if (value is string) // 获取传入的值,比如aabbcc或112233
{
string aabbcc = value.ToString();
b = !string.IsNullOrWhiteSpace(aabbcc) && aabbcc.Length == 6 && aabbcc[0] == aabbcc[1] && aabbcc[2] == aabbcc[3] && aabbcc[4] == aabbcc[5];
}
}
return b;
}
}
services.Configure<RouteOptions>(opt =>
{
opt.ConstraintMap.Add("aabbcc", typeof(AABBCCRouteConstraint));
});
public class ABCDRouteConstraint : IRouteConstraint
{
public int A { get; private set; }
public int B { get; private set; }
public int C { get; private set; }
public int D { get; private set; }
public ABCDRouteConstraint(int a, int b, int c, int d)
{
A = a;B = b;C = c;D = d;
}
public bool Match(HttpContext httpContext, IRouter route, string routeKey, IDictionary<string, object> values, RouteDirection routeDirection)
{
bool b = false;
object value;
if (values.TryGetValue(routeKey, out value) && value != null)
{
var valueString = value.ToString();//这里需要进行进一步的验证工作
return true;
}
return b;
}
}
[Route("index/{productId:abcd(1,20,30,40)}")]
[Route("index/{productId:abcd}")] //没有为该对象定义无参数的构造函数
[Route("index/{productId:abcd(a)}")]
[Route("index/{productId:abcd('a')}")] //输入字符串的格式不正确
[Route("index/{productId:abcd(1,2,3)}")] //构造函数的参数个数和定义的参数个数不一致。
[Route("index/{productId:abcd(a,b,c,d)}")]
[Route("index/{productId:abcd('a','b','c','d')}")]
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有