Какие маршруты добавить, чтобы я мог смешать MVC и веб-API как с действиями Get по умолчанию, так и с дополнительными действиями? - PullRequest
0 голосов
/ 19 мая 2019

Я создаю смешанное приложение asp.net, которое имеет контроллер mvc и контроллер веб-API.Я прочитал документы, но не могу получить соответствие по умолчанию для контроллеров веб-API.

Вот мои сопоставленные маршруты:

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "api default",
                template: "api/{controller}/{id?}");
        });

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "api actions",
                template: "api/{controller}/{action}/{id?}");
        });

Вот действие, которое не соответствует и возвращает HTTP 500:

    [HttpGet("{id:int}")]
    public IActionResult Get(int id)
    {
        try
        {
            //EF Core statement that returns data is here

            return Ok(data);
        }
        catch(Exception ex)
        {
            return BadRequest();
        }

    }

Это соответствует отлично:

    [Route("ProjectRoles/{id:int}")]
    [HttpGet("{id:int}")]
    public IActionResult ProjectRoles(int id)
    {
        try
        {
            //EF Core that gets data
            if (data == null)
                return NotFound(id);
            else
                return Ok(data.ProjectRoles);
        }
        catch (Exception ex)
        {
            return BadRequest();
        }
    }

1 Ответ

0 голосов
/ 20 мая 2019

Вам не нужно добавлять дополнительную маршрутизацию при запуске. Вы можете использовать MVC и контроллер Web Api вместе в основном проекте MVC asp.net по умолчанию. Просто создайте новый контроллер web api, если щелкнуть правой кнопкой мыши папку Controllers впротив

Единственное, что нужно настроить - это настроить маршрутизацию атрибутов в вашем веб-контроллере API, например

[Route("api/[controller]")]
[ApiController]
public class ProjectRolesController : ControllerBase
{
    // GET: api/ProjectRoles
    [HttpGet]
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }

    // GET: api/ProjectRoles/5
    [HttpGet("{id}", Name = "Get")]
    public string Get(int id)
    {
        return "value";
    }

Startup.cs:

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