首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP.NET核心将子域名映射到区域

ASP.NET核心将子域名映射到区域
EN

Stack Overflow用户
提问于 2017-02-17 09:18:40
回答 3查看 6.2K关注 0票数 5

我正在尝试将子域映射到区域,到目前为止,我找到的所有答案都是针对以前版本的.NET,而不是.NET核心。我找到的最好和最相关的答案来自This page。然而,我在实现它时遇到了一个问题,因为它似乎是以前版本的.NET核心的演练,并且我得到了'MvcRouteHandler' does not contain a constructor that takes 0 arguments错误。

下面是我从中得到错误的代码:

代码语言:javascript
复制
public class AreaRouter : MvcRouteHandler, IRouter //the error happens in this line, visual studio underlines the AreaRoute word
{
    public new async Task RouteAsync(RouteContext context)
    {
        string url = context.HttpContext.Request.Headers["HOST"];

        string firstDomain = url.Split('.')[0];
        string subDomain = char.ToUpper(firstDomain[0]) + firstDomain.Substring(1);

        string area = subDomain;

        context.RouteData.Values.Add("area", subDomain);

        await base.RouteAsync(context);
    }
}

所以不管怎样,我正在寻找另一种方法来将子域映射到区域,或者找到一种方法来修复这个错误。

EN

回答 3

Stack Overflow用户

发布于 2017-05-31 01:30:09

编辑:完整的教程可用here。已成功创建您的文件的工作版本。

路由器的

  1. 代码可从here获得。在文件顶部的_allowedSubdomains数组中指定您自己的子域。
  2. 添加路由器后,更改Startup.cs中的代码:

代码语言:javascript
复制
app.UseMvc(routes =>
       {
       routes.DefaultHandler = areaRouter;

areaRouter应该按照@mepsi的描述进行传递。

  1. 最后,允许使用here中描述的sudomain。

现在一切都应该正常工作了。完整的代码可以在Github上找到。我会写完整的教程,后面会给出所有的解释。

票数 7
EN

Stack Overflow用户

发布于 2017-02-17 19:46:13

我也在为同样的问题而苦苦挣扎,我设法在ConfigureServices上添加了我的路由器,如下所示:

代码语言:javascript
复制
services.AddSingleton<AreaRouter>();

然后使用以下命令将其注入到Configure方法中:

代码语言:javascript
复制
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, AreaRouter areaRouter)

最后把它放到合适的位置:

代码语言:javascript
复制
routes.DefaultHandler = areaRouter;

修复这个问题让我进步了,但不幸的是,我仍然不能让子域路由按预期工作。在这一点上,似乎已经做出了路由决策。

注意:我只会添加注释,但我还不能这样做。

票数 1
EN

Stack Overflow用户

发布于 2017-02-17 09:34:39

如果你看一下MvcRouteHandler的定义,你会发现它没有无参数的构造函数,可用的构造函数有:

代码语言:javascript
复制
public MvcRouteHandler(IActionInvokerFactory actionInvokerFactory, IActionSelector actionSelector, DiagnosticSource diagnosticSource, ILoggerFactory loggerFactory);
public MvcRouteHandler(IActionInvokerFactory actionInvokerFactory, IActionSelector actionSelector, DiagnosticSource diagnosticSource, ILoggerFactory loggerFactory, IActionContextAccessor actionContextAccessor);

当你从它继承时,你必须调用基构造器,所以通常你会用相同的参数创建一个构造器,并将它传递给基构造器,因为你不需要任何额外的参数:

代码语言:javascript
复制
    public AreaRouter (IActionInvokerFactory actionInvokerFactory,
    IActionSelector actionSelector, DiagnosticSource diagnosticSource,
    ILoggerFactory loggerFactory, IActionContextAccessor actionContextAccessor)
    : base(actionInvokerFactory, actionSelector, diagnosticSource,
    loggerFactory, actionContextAccessor) { }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42287716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档