Как установить базовый путь приложения ASP.NET Core при отключении доступа из корневого пути? - PullRequest
0 голосов
/ 22 ноября 2018

Я знаю, что могу установить базовый путь к моей службе, используя app.UsePathBase("/AppPath");, чтобы мой API был доступен с http://foo.com/AppPath/controller1, но если я сделаю это, мой API также будет доступен с корневого пути http://foo.com/controller1.Как отключить доступ из корневого пути?

Я также пытался использовать маршрут, подобный этому app.UseMvc(routes => routes.MapRoute("default", "IRate/{controller}/{action}/{id?}"));, но у него та же проблема.

Причина, по которой я хочу это сделать, заключается в том, чтокогда он развернут в рабочей среде, он будет развернут под префиксом приложения (а не в качестве корневого приложения), а когда во время отладки я запускаю API на локальном хосте, я хочу смоделировать производственные ограничения.

1 Ответ

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

Это специально в соответствии с этим выпуском Github .

UsePathBase в первую очередь предназначен для того, чтобы убрать эти сегменты с вашего пути, потому что они являются деталями развертывания, и если они останутся, это испортит вашу маршрутизацию.

Рассмотрите альтернативу.Если бы он отключил корневой путь, как бы он это сделал?404 не совсем подходит, вероятно, этот путь доступен на отдельном экземпляре вашего сайта, на котором размещен корень.Вы можете использовать Map, как показано выше, если вы действительно хотите 404.

Если вы хотите вернуть 404 при доступе к корню, вы можете использовать вложенное отображение, которое описано в этой проблеме:

В этом случае вам, вероятно, нужно что-то более близкое к этому, с вложенным MapMiddleware:

public void Configure(IApplicationBuilder app)
{
    app.Map("/basepath", mainapp =>
    {
        mainapp.Map("/ping", map => map.Run(async
            ctx => await ctx.Response.WriteAsync("pong")));

        mainapp.UseMvc();
    });
}

Таким образом, вы указываете только сопоставления, маршруты и т. Д.для запросов, которые подпадают под /basepath.Все остальное отбрасывается и возвращает 404.

Вы должны будете не забывать звонить mainapp вместо app для всех вызовов конфигурации.В противном случае вы можете получить URL-адреса script и css, указывающие на корень, а не на пользовательский базовый путь.Вы можете избежать этого, извлекая код конфигурации из Configure(app,env) в отдельный метод, например:

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.Map("/AppPath", mainapp =>
        {
            mappedConfigure(mainapp,env);
        });
    }

    private void mappedConfigure(IApplicationBuilder app,IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
            // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseCookiePolicy();

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...