Можно ли создать отображение маршрута в ASP.Net Core 2.1 без AddMvc? - PullRequest
0 голосов
/ 18 сентября 2018

Я совершенно новичок в ASP.NET Core, я много искал, но все еще путаюсь с маршрутизацией в Core 2.1.

Итак, я создал пример проекта, выбрав API в качестве шаблона, а VS создал что-то вроде следующего:

public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseMvc();

    }

Но мне не нужны все функции, предлагаемые MVC, потому что мой проект не использует представления.

Любая помощь будет оценена

Ответы [ 3 ]

0 голосов
/ 18 сентября 2018

Да. От https://docs.microsoft.com/en-us/aspnet/core/fundamentals/routing?view=aspnetcore-2.1:

var routeBuilder = new RouteBuilder(app, trackPackageRouteHandler);

routeBuilder.MapGet("hello/{name}", context => {
    var name = context.GetRouteValue("name");
    return context.Response.WriteAsync($"Hi, {name}!"); });            

var routes = routeBuilder.Build(); app.UseRouter(routes);

Или, если вы хотите реализовать его как пользовательское промежуточное ПО и вам нужна только базовая маршрутизация:

От: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/middleware/?view=aspnetcore-2.1

public class Startup
{
    private static void HandleMapTest1(IApplicationBuilder app)
    {
        app.Run(async context =>
        {
            await context.Response.WriteAsync("Map Test 1");
        });
    }

    public void Configure(IApplicationBuilder app)
    {
        app.Map("/map1", HandleMapTest1);

        app.Run(async context =>
        {
            await context.Response.WriteAsync("Hello from non-Map delegate. <p>");
        });
    }
}

Или, если вам нужны дополнительные функции маршрутизации, см. Ответ itmius https://stackoverflow.com/a/52377807/2085502

0 голосов
/ 19 сентября 2018

Решено с использованием следующего запуска:

public void ConfigureServices(IServiceCollection services)
{
     services.AddMvcCore().SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
            .AddApiExplorer()
            .AddAuthorization()
            .AddJsonFormatters()
            .AddCors();
}

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseHsts();
    }

    app.UseHttpsRedirection();
    app.UseMvc();
}

Спасибо за все, что пытались мне помочь!

0 голосов
/ 18 сентября 2018

Да.Хотя мы часто используем маршрутизацию с MVC, Routing - это проект, который не зависит от MVC .

При работе вместе с ASP.NET Core, маршрутизация работает как RouterMiddlewareза кулисами .Если вы не хотите использовать MVC, просто создайте маршрутизатор:

private IRouter BuildRouter(IApplicationBuilder applicationBuilder)
{
    var builder = new RouteBuilder(applicationBuilder);

    // use middlewares to configure a route
    builder.MapMiddlewareGet("/api/hello", appBuilder => {
        appBuilder.Use(async (context,next) => {
            context.Response.Headers["H1"] = "Hello1";
            await next();
        });
        appBuilder.Use(async (context,next) => {
            context.Response.Headers["H2"] = "Hello2";
            await next();
        });
        appBuilder.Run(async (context) => {
            await context.Response.WriteAsync("Hello,world");
        });

    });

    builder.MapMiddlewarePost("/api/hello", appBuilder => {
        // ...
    });

    // ....

    return builder.Build();
}

и зарегистрируйте промежуточное ПО маршрутизатора

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    // ...
    app.UseRouter(BuildRouter(app));
}

Вот снимок экрана, когда он работает:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...