Asp.net mvc - изменить маршрут по умолчанию на http://myparameter.localhost:5000/controller/action/id - PullRequest
0 голосов
/ 16 ноября 2018

Маршрут по умолчанию в 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 голосов
/ 17 ноября 2018

Прежде всего, я хотел бы поблагодарить всех за помощь.

Если когда-нибудь кому-то понадобится это сделать, я разработал следующее решение с информацией ответа klabranche.

Запуск.cs

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

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

            app.UseRewriter(options);
         }

         ....
    }

iisUrlRewrite.xml - переписать https://Mustang.localhost:5001/forsale?anyquerystring=anyvalue для https://localhost:5001/cars/Mustang/forsale?anyquerystring=anyvalue

    <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>

Контроллер

[Route("Cars")]
public class CarsController : Controller
{
    [Route("{nameCar}")]
    public IActionResult Index(string nameCar)
    {
        return View("Views/Home/CarsView.cshtml");
    }

    [Route("{nameCar}/forsale")]
    public IActionResult ForSale(string nameCar)
    {
        return View("Views/Home/CarsForSaleView.cshtml");
    }

}
0 голосов
/ 16 ноября 2018

Вы не можете сделать это с помощью маршрута MVC и / или вашей веб-инфраструктуры.Вы должны сделать это на уровне веб-сервера и DNS.Он называется поддоменами.

DNS должен быть создан как поддомен подстановочного знака (* .domainname), чтобы вы могли иметь столько, сколько хотите, или вручную для каждого, если вы знаете, что у вас будет несколько (.domain, b.domain), чтобы домен (localhost) знал, что все (*) перед именем домена все еще направлено на ваш сервер.

Затем вам нужно настроить свой веб-сервер, чтобы знать, как взять каждый поддомен и отправить его на правильный веб-сайт.

Если у вас есть два дочерних сайта a.localhost и b.localhost, вам необходимо добавить два сайта в IIS (при условии, что IIS, поскольку это asp.net) с именами сайтов a.localhost и b.localhost.

Вам нужно будет указать физический путь сайта к каждой папке (a & b), оставить привязку одну / по умолчанию (если я правильно помню), чтобы она указывала на localhost (или ваше доменное имя) иhost должен быть a.localhost и b.localhost соответственно.

Поскольку вы делаете это на localhost, я собираюсь предположить, что вы делаете это на компьютере разработчика.Файл hosts может имитировать ваши потребности DNS на вашем локальном компьютере.Измените файл hosts (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 вы должны открыть файл applicationhost.config в папке .vs \ config и вручную найти и отредактировать привязки для вашего приложения.В вашем примере это было бы что-то вроде <binding protocol="http" bindingInformation="*:5000:localhost">

, добавив две новые привязки для a и b <<code>binding protocol="http" bindingInformation="*:5000:a.localhost">

И .... как только вы получите эту работу, ваши маршруты в MVCнеосведомлены о поддомене.Вы не меняете их.

...