ASP.NET MVC-将默认路由更改为http://myparameter.localhost:5000 / controller / action / id

时间:2018-11-16 14:31:38

标签: asp.net asp.net-mvc asp.net-core asp.net-core-mvc asp.net-core-2.1

asp.net mvc core 2.1中的默认路由为http://localhost:5000/controller/action/id

            routes.MapRoute( 
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");

有一些创建新路由的方法,如下所示,我可以在“ localhost”之前使用参数吗?

http:// myparameter .localhost:5000 / controller / action / id

谢谢

2 个答案:

答案 0 :(得分:4)

您不能使用MVC路由和/或Web框架执行此操作。您必须在Web服务器和dns级别上执行此操作。这就是所谓的子域。

必须将DNS创建为通配符子域(* .domainname),因此,您可以根据需要设置多个DNS,或者如果知道要设置几个(a.domain,b.domain),则可以手动为每个DNS创建一个因此该域(localhost)知道域名之前的任何内容(*)仍直接指向您的服务器。

然后,您必须设置Web服务器,以了解如何获取每个子域并将其发送到正确的网站。

如果您有两个子站点a.localhost和b.localhost,则需要将两个站点添加到IIS(假定IIS,因为这是asp.net),其站点名称分别为a.localhost和b.localhost。

您必须将站点的物理路径指向每个文件夹(a和b),单独保留/默认绑定(如果我没记错的话),使其指向本地主机(或您的域名),并且主机必须分别是a.localhost和b.localhost。

由于您是在本地主机上执行此操作,因此我假设您正在开发人员计算机上执行此操作。 hosts文件可以模拟本地计算机上的DNS需求。更改主机文件(C:\ Windows \ System32 \ drivers \ etc),将a.localhost和b.localhost添加到本地IP地址,以确保它们可以解析。

127.0.0.1 a.localhost
127.0.0.1 b.localhost

如果您正在使用本地开发盒,并且正在使用IIS Express,则仍然可以使用它来进行子域设置。无需执行IIS步骤,而是打开.vs \ config文件夹中的applicationhost.config文件,然后手动查找和编辑应用程序的绑定。在您的示例情况下,它将类似于<binding protocol="http" bindingInformation="*:5000:localhost">

为a和b <binding protocol="http" bindingInformation="*:5000:a.localhost">

添加两个新绑定

然后...。一旦完成,您在MVC中的路由将对子域一无所知。您无需更改它们。

答案 1 :(得分:0)

首先,我要感谢所有帮助。

如果某天某人需要这样做,我用klabranche响应信息开发了以下解决方案。

Startup.cs

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">  
    <xsl:template match="/">
        <xsl:value-of select="count(/root/a/b[preceding-sibling::b])"/>        
    </xsl:template>
</xsl:stylesheet>

iisUrlRewrite.xml-为https://Mustang.localhost:5001/forsale?anyquerystring=anyvalue重写https://localhost:5001/cars/Mustang/forsale?anyquerystring=anyvalue

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
         ....

         using (StreamReader iisUrlRewriteStreamReader =
                File.OpenText("RewriteUrlsFiles/iisUrlRewrite.xml"))
         {
            var options = new RewriteOptions()
                .AddIISUrlRewrite(iisUrlRewriteStreamReader);

            app.UseRewriter(options);
         }

         ....
    }

控制器

    <rewrite>
        <rules>
            <rule name="test1" stopProcessing="true">
                <match url=".*" />
                <conditions>
                    <add input="{HTTP_HOST}" pattern="^((.+.)?).localhost:5001" />
                </conditions>
                <action type="Rewrite" url="https://localhost:5001/Cars/{C:1}{REQUEST_URI}" />
            </rule>
        </rules>
    </rewrite>