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
谢谢
答案 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>