【发布时间】:2018-08-04 23:53:25
【问题描述】:
我有 2 个域(.com 和 .ru)和 2 个 URL,例如 site.com/about-us 和 site.ru/o-nas,它们应该重定向到同一页面。该网站使用 Razor 页面。
此外,特定的 URL 应该在适当的域中可用。例如:
-
site.COM/o-nas不应该工作并返回Not Found (404) -
site.RU/about-us不应该工作并返回Not Found (404)我发现过滤器可以正常工作,但是对于
site.com/about-us和site.ru/o-nas,这两个过滤器都被调用了。
如何只为特定的 URL 调用 1,可以吗?谢谢,我当前的代码如下。
public static class DomainFilters
{
public static IPageApplicationModelConvention DomainEng(
this PageConventionCollection con, string pageName, string route = "")
{
return con.AddPageApplicationModelConvention(pageName, model =>
{
model.Filters.Add(new EnglishActionFilter(route));
});
}
public static IPageApplicationModelConvention DomainRussian(
this PageConventionCollection con, string pageName, string route = "")
{
return con.AddPageApplicationModelConvention(pageName, model =>
{
model.Filters.Add(new RussianActionFilter(route));
});
}
}
public class EnglishActionFilter : IResultFilter
{
public void OnResultExecuting(ResultExecutingContext context)
{
if (context.HttpContext.Request.Host.ToString().Contains(".ru"))
{
context.Result = new NotFoundResult();
}
}
public void OnResultExecuted(ResultExecutedContext context) { }
}
public class RussianActionFilter : IResultFilter
{
public void OnResultExecuting(ResultExecutingContext context)
{
if (context.HttpContext.Request.Host.ToString().Contains(".com"))
{
context.Result = new NotFoundResult();
}
}
public void OnResultExecuted(ResultExecutedContext context) { }
}
最后是来自Startup.cs 的ConfigureServices 方法:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc()
.AddRazorPagesOptions(options =>
{
options.Conventions.DomainEng("/AboutUs", "about-us");
options.Conventions.DomainRussian("/AboutUs", "o-nas");
})
}
【问题讨论】:
标签: c# asp.net-core-2.0 razor-pages asp.net-core-routing