Ядро ASP.net, как отобразить сообщение и поставить маршрут запроса на HTTP:// сайт / область / контроллер
Я собираюсь сопоставить свой пост и поставить запрос на URL http://site/area/controller
и я использовал HttpPost
а также HttpPut
атрибутов.
Но когда я отправляю данные на сервер, он возвращает 404 Не найдено.
Мой код:
public class ApplicationsController : Controller
{
private readonly IApplicationService _applicationService;
public ApplicationsController(IApplicationService applicationService)
{
_applicationService = applicationService;
}
[HttpGet]
public async Task<IActionResult> Index(ApplicationQuery query)
{
var permissionNodes = await _applicationService.SelectePagedApplicationsAsync(query);
ViewData["Query"] = query;
return View(permissionNodes.Data);
}
[HttpPost("/Applications")]
public async Task<IActionResult> Create(ApplicationViewModel model)
{
var app = Mapper.Map<Application>(model);
var result = await _applicationService.CreateApplicationAsync(app);
ViewData["ServiceResult"] = result;
return View(nameof(Edit));
}
[HttpPut("/Applications")]
public async Task<IActionResult> Update(ApplicationViewModel model)
{
var app = Mapper.Map<Application>(model);
var result = await _applicationService.CreateApplicationAsync(app);
ViewData["ServiceResult"] = result;
return View(nameof(Edit));
}
[HttpGet]
public async Task<IActionResult> Edit(long? id)
{
var result = await _applicationService.FindApplicationAsync(new ApplicationQuery
{
Id = id
});
var model = Mapper.Map<ApplicationViewModel>(result.Data);
return View(model);
}
Как заставить MVC сопоставить мой запрос с моим действием?
1 ответ
Похоже, вы пропускаете токены для указанных маршрутов.
Замена токенов в шаблонах маршрутов ([контроллер], [действие], [область])
Для удобства атрибуты маршрутов поддерживают замену токенов, заключая их в квадратные скобки (
[
,]
). Жетоны[action]
,[area]
, а также[controller]
будут заменены значениями имени действия, имени области и имени контроллера из действия, в котором определен маршрут.
Видя, как вы хотите изолировать эти маршруты только к POST
а также PUT
конечные точки обновляют маршруты соответственно
public class ApplicationsController : Controller {
//...code removed for brevity
//Matches POST /{area}/applications
[HttpPost("[area]/[controller]")]
public async Task<IActionResult> Create([FromBody]ApplicationViewModel model) {
//...code removed for brevity
}
//Matches PUT /{area}/applications
[HttpPut("[area]/[controller]")]
public async Task<IActionResult> Update([FromBody]ApplicationViewModel model) {
//...code removed for brevity
}
//...code removed for brevity
}
Вышесказанное также предполагает, что правильная конфигурация уже была сделана в отношении областей