Маршрутизация атрибутов не работает и выдает ошибку 404 в URL - PullRequest
1 голос
/ 17 июня 2020

Я применил маршрутизацию атрибутов к моему RouteConfig.cs и добавил атрибут [Route ("Store")] в Action, но получаю ошибку при доступе к URL.

Рабочий URL: http://localhost: 52859 / shop / store / dominos

Я хочу изменить его на http://localhost: 52859 / store / dominos

Но после обновления маршрутизации атрибутов я вижу ошибку на странице как

Ошибка сервера в приложении '/'. Ошибка выполнения Описание: исключение при обработке вашего запроса. Кроме того, при выполнении настраиваемой страницы ошибки для первого исключения возникло другое исключение. Запрос был прерван.

, а в URL-адресе он отображается как

http://localhost: 52859 / Errors / Error404? Aspxerrorpath = / shop / store / dominos

Обновлено в RouteConfig

routes.MapMvcAttributeRoutes();

Действие для вызова магазинов

// GET: /shop/category/name
        [Route("Store")]
        public ActionResult Store(string name)
        {
            // Declare a list of Coupons
            List<Coupn> coupnList;


            using (ApplicationDbContext db = new ApplicationDbContext())
            {

                // Get store id
                Store storeDTO = db.Store.Where(x => x.Slug == name).FirstOrDefault();
                int storeId = storeDTO.StoreID;
                ViewBag.TopDesc = storeDTO.TopDesc;
                ViewBag.MainDesc = storeDTO.MainDesc;
                ViewBag.StoreLogo = storeDTO.StoreLogo;
                ViewBag.StoreName = storeDTO.StoreName;


                // Init the list
                coupnList = db.Coupns.ToArray().Where(x => x.StoreID == storeId).ToList();

                // Get Store     name
                var coupnStore = db.Coupns.Where(x => x.StoreID == storeId).FirstOrDefault();
                ViewBag.StoreName = coupnStore.StoreName;

            }

            // Return view with list
            return View(coupnList);
        }

Помощь по этому поводу приветствуется.

Ответы [ 2 ]

2 голосов
/ 17 июня 2020

Вам необходимо изменить маршрут на уровне Controller для URL-адреса, который вы хотите использовать для работы, и установить для маршрута action значение "{name}". Вот так:

[Route("Store")]
public class StoreController: Controller
{
    // GET: /store/name
    [Route("{name}")]
    public ActionResult Store(string name)
    {
        // Declare a list of Coupons
        List<Coupn> coupnList;


        using (ApplicationDbContext db = new ApplicationDbContext())
        {

            // Get store id
            Store storeDTO = db.Store.Where(x => x.Slug == name).FirstOrDefault();
            int storeId = storeDTO.StoreID;
            ViewBag.TopDesc = storeDTO.TopDesc;
            ViewBag.MainDesc = storeDTO.MainDesc;
            ViewBag.StoreLogo = storeDTO.StoreLogo;
            ViewBag.StoreName = storeDTO.StoreName;


            // Init the list
            coupnList = db.Coupns.ToArray().Where(x => x.StoreID == storeId).ToList();

            // Get Store     name
            var coupnStore = db.Coupns.Where(x => x.StoreID == storeId).FirstOrDefault();
            ViewBag.StoreName = coupnStore.StoreName;

        }

        // Return view with list
        return View(coupnList);
    }
}

Если вы работаете с ASP.NET MVC, обязательно активируйте Маршрутизацию:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute(“{resource}.axd/{*pathInfo}”);

    routes.MapMvcAttributeRoutes();

    routes.MapRoute(
        name: “Default”,
        url: “{controller}/{action}/{id}”,
        defaults: new { controller = “Home”, action = “Index”, id = UrlParameter.Optional }
    );
}

Если вы работаете с .Net Core:

public void Configure(
    IApplicationBuilder app,
    IWebHostEnvironment env
)
{
    app.UseRouting();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}
1 голос
/ 17 июня 2020

Обновите свой Route как [Route("~/[action]/{name}")].

Установите этот флажок, чтобы получить дополнительные сведения о маршрутизации. https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/routing?view=aspnetcore-3.1#attribute -routing-for-rest-apis

Ваш action будет выглядеть, как показано ниже.

[Route("~/[action]/{name}")]
public ActionResult Store(string name)
{
    // Your code
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...