asp.net-core
ルーティング
サーチ…
基本的なルーティング
app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); });
これは、 /Home/Index
、 /Home/Index/123
および/
ルーティングの制約
特定の値またはパターンにパラメータを制約するルート内で使用できるカスタムルーティング制約を作成することは可能です。
この制約は、en-US、de-DE、zh-CHT、zh-Hantなどの典型的な文化/ロケールパターンに一致します。
public class LocaleConstraint : IRouteConstraint
{
private static readonly Regex LocalePattern = new Regex(@"^[a-z]{2}(-[a-z]{2,4})?$",
RegexOptions.Compiled | RegexOptions.IgnoreCase);
public bool Match(HttpContext httpContext, IRouter route, string routeKey,
RouteValueDictionary values, RouteDirection routeDirection)
{
if (!values.ContainsKey(routeKey))
return false;
string locale = values[routeKey] as string;
if (string.IsNullOrWhiteSpace(locale))
return false;
return LocalePattern.IsMatch(locale);
}
}
その後、制約を登録してから経路で使用する必要があります。
services.Configure<RouteOptions>(options =>
{
options.ConstraintMap.Add("locale", typeof(LocaleConstraint));
});
今はルート内で使用できます。
それをコントローラで使用する
[Route("api/{culture:locale}/[controller]")]
public class ProductController : Controller { }
アクションで使用する
[HttpGet("api/{culture:locale}/[controller]/{productId}"]
public Task<IActionResult> GetProductAsync(string productId) { }
デフォルトルートでの使用
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "api/{culture:locale}/{controller}/{id?}");
routes.MapRoute(
name: "default",
template: "api/{controller}/{id?}");
});
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow