Ядро Asp.net, как создать собственный маршрут? - PullRequest
0 голосов
/ 28 июня 2019

Я работаю над проектом ASP.NET Core 2 и хочу создать собственный маршрут.

Теперь у меня есть такой маршрут

https://localhost:44354/Question/DisplayQuestion?idqstoinid=21

Этот маршрут содержит domain/[controller]/[action]/{id?}

Но я хочу иметь маршрут, подобный stackoverflow.com

Я хочу это:

domain/[controller]/[id]/title of question

Другими словами, я хочу:

https://localhost:44354/Question/21/myQuestionTitle

Ответы [ 3 ]

1 голос
/ 28 июня 2019

Вы можете сделать это

[Route("[controller]/[action]")]
public class QuestionController : Controller {
 [HttpGet("{id}/{title}")]
 public async Task<IActionResult> Index(int id, string title) {

 }

}
0 голосов
/ 01 июля 2019

Попробуйте следующую модификацию:

Использование контроллера [Route("Test/{id}/{name}")] над запросом 'get' Details action

[Route("Test/{id}/{name}")]
    public async Task<IActionResult> Details(int? id ,string name)
    {
        if (id == null)
        {
            return NotFound();
        }

        var test = await _context.TestTab
            .FirstOrDefaultAsync(m => m.Id == id);
        if (test == null)
        {
            return NotFound();
        }

        return View(test);
    }

Индекс просмотра использовать asp-route-{parameter} для передачи id и name

<table class="table">
<thead>
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.Name)
        </th>
        <th></th>
    </tr>
</thead>
<tbody>
@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.Name)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Bedget)
        </td>
        <td>
            <a asp-action="Edit" asp-route-id="@item.Id">Edit</a> |
            <a asp-action="Details" asp-route-id="@item.Id" asp-route-name="@item.Name">Details</a> |
            <a asp-action="Delete" asp-route-id="@item.Id">Delete</a>
        </td>
    </tr>

}

0 голосов
/ 28 июня 2019

Вы должны добавить ниже код для маршрутизации:

[Route("Question")]
public class QuestionController : Controller 
{

 [HttpGet("{id}/{title}")]
 public async Task<IActionResult> Index(int id, string title) 
 {
  //Your Code
 }

}

После ввода URL-адреса, например https://localhost:44301/Question/21/myQuestionTitle, вы можете увидеть значения сумок для просмотра на странице просмотра:

enter image description here

Ваше действие контроллера должно быть:

enter image description here

Ссылки : MSDN - Маршрутизация к действиям контроллера

Ура !!

...