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

У меня есть этот контроллер и действие:

[Route("categories")]
public class CategoriesController : Controller
{
    [HttpGet("{*category:regex(^[[A-Za-z0-9/]]*$)}")]
    public IActionResult ViewObjectsInCategory([FromRoute] string category)
    {
        return Ok(category ?? ""); // for now, just echo what you inputted
    }
}

Я собираюсь принять следующие URL-маршруты:

/categories
/categories/abc
/categories/abc/def
/categories/abc/def/1234/ghi

По сути, пользователь может поместить в URL все, что он хочет после /categories (включая ничего), при условии, что это заглавная буква, строчная буква, цифра или косая черта. Если пользователь вводит недопустимый символ, он должен получить 404.

Отправленный код правильно перенаправит мои перечисленные запросы на все, кроме первой записи (/categories). Он возвращает 404, когда я хочу, чтобы он выполнил свое действие.

Глядя на логи, ядро ​​ASP.Net абсолютно отвергает путь к моим действиям:

info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
      Request starting HTTP/1.1 GET http://localhost:5000/categories
dbug: Microsoft.AspNetCore.HostFiltering.HostFilteringMiddleware[0]
      Wildcard detected, all requests with hosts will be allowed.
dbug: Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware[4]
      The request path /categories does not match a supported file type
dbug: Microsoft.AspNetCore.Routing.Matching.DfaMatcher[1001]
      1 candidate(s) found for the request path '/categories'
dbug: Microsoft.AspNetCore.Routing.Matching.DfaMatcher[1003]
      Endpoint 'MyApp.Controllers.CategoriesController.ViewObjectsInCategory (MyApp)' with route pattern 'categories/{*category:regex(^[A-Za-z0-9/]*$)}' was rejected by constraint 'category':'Microsoft.AspNetCore.Routing.Constraints.RegexInlineRouteConstraint' with value '(null)' for the request path '/categories'
dbug: Microsoft.AspNetCore.Routing.Matching.DfaMatcher[1004]
      Endpoint 'MyApp.Controllers.CategoriesController.ViewObjectsInCategory (MyApp)' with route pattern 'categories/{*category:regex(^[A-Za-z0-9/]*$)}' is not valid for the request path '/categories'
dbug: Microsoft.AspNetCore.Routing.EndpointRoutingMiddleware[2]
      Request did not match any endpoints

Что можно сделать, чтобы этот атрибут маршрута принимал оба «пустых» значения (/categories), а также проверял, что, если оно присутствует, любое введенное пользователем значение не имеет недопустимых символов?

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