Маршрутизация в ASP. NET Core 3.0 - PullRequest
0 голосов
/ 15 января 2020

У меня следующая проблема: я хочу написать ASP. Net Проект, в котором пользователи могут зарегистрироваться и войти в систему, а после этого также добавлять или удалять вещи. Для пользователя у меня есть UserController, а для карты - MapController. Я хочу иметь возможность написать в URL localhost: port / User / Login, чтобы пользователь мог войти через контроллер пользователя или, когда я хочу добавить магазин, я хочу написать localhost: port / map / Add_Shop и т. Д.

Это мой UserController:

using System;
using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc;
using Soft_Arch_WebAPI.Models;

namespace Soft_Arch_WebAPI.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class UserController : ControllerBase
    {
        [HttpPost]
        public String Register()
        {
            return "Hier werden User registriert";
            //Get Values from Form and Send to Service
        }

        [HttpPost]
        public String Login()
        {
            return "Hier werden User eingeloggt";
            //Get Values from Form and Send to Service
        }

        [HttpPut]
        public String ResetPWD(int ID, String Password)
        {
            return "Hier können User Ihr Passwort ändern";
            //Get Values from Form and Send to Service
        }
    }
}

И это мой Startup.cs

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

namespace Soft_Arch_WebAPI
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllersWithViews();
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment 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.UseRouting();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");

                endpoints.MapControllerRoute(
                  name: "user",
                  pattern: "User/Register/");

                endpoints.MapControllerRoute(
                name: "user",
                pattern: "User/Login/");

                endpoints.MapControllerRoute(
                name: "user",
                pattern: "User/ResetPWD/");

                endpoints.MapControllerRoute(
                name: "map",
                pattern: "{controller=Map}/Add_Shop/");

                endpoints.MapControllerRoute(
                name: "map",
                pattern: "{controller=Map}/Edit_Shop/");

                endpoints.MapControllerRoute(
                name: "favourite",
                pattern: "{controller=Favourite}/Add_Favourite/");

                endpoints.MapControllerRoute(
                name: "favourite",
                pattern: "{controller=Favourite}/Delete_Favourite/");

                endpoints.MapControllerRoute(
                name: "poi",
                pattern: "{controller=Poi}/Add_Poi/");

                endpoints.MapControllerRoute(
                name: "poi",
                pattern: "{controller=Poi}/Delete_Poi/");

            });

        }
    }
}

Как я могу установить маршруты, как указано ранее, что я могу получить доступ, например, логин функция в Usercontroller через localhost: порт / пользователь / логин и т. д.

Ответы [ 2 ]

0 голосов
/ 15 января 2020

Как сказал Хемант Кумар, вам нужно настроить атрибут маршрутизации вручную, а не настраивать UseEndpoints в asp. net core web api. Из do c

Атрибут [ApiController] делает обязательной маршрутизацию атрибута.

Действия недоступны по обычным маршрутам, определяемым UseEndpoints, UseMvc или UseMvcWithDefaultRoute при запуске .Configure.

0 голосов
/ 15 января 2020

@ Simon Похоже, мы используем маршрутизацию атрибутов для User Controller. Мы можем использовать атрибуты для входа в метод действия в самом контроллере, как показано ниже:

using System;
using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc;
using Soft_Arch_WebAPI.Models;

namespace Soft_Arch_WebAPI.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class UserController : ControllerBase
    {
        [HttpPost("Register")]
        public String Register()
        {
            return "Hier werden User registriert";
            //Get Values from Form and Send to Service
        }

        [HttpPost("login")]
        public String Login()
        {
            return "Hier werden User eingeloggt";
            //Get Values from Form and Send to Service
        }

        [HttpPut]
        public String ResetPWD(int ID, String Password)
        {
            return "Hier können User Ihr Passwort ändern";
            //Get Values from Form and Send to Service
        }
    }
}

Поскольку мы используем маршрутизацию атрибутов для пользовательского контроллера, мы можем удалить запись для пользовательского контроллера из Startup.cs. Надеюсь, это поможет.

...