Ошибка HTTP 404.0 - Не найдено - Маршрутизация атрибута MVC - PullRequest
0 голосов
/ 19 сентября 2019

Я пытаюсь изучить маршрутизацию атрибутов MVC 5.

Я включил маршрутизацию атрибутов

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

    namespace Vidly
    {
        public class RouteConfig
        {
            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 }
                );
            }
        }
    }

Я определил маршрутизацию атрибутов в MoviesController.cs Файл

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Vidly.Models;

namespace Vidly.Controllers
{
    public class MoviesController : Controller
    {
        // GET: Movies
        public ActionResult Random()
        {
            var movie = new Movie() { Name = "Shrek!" };
            //return View(movie);
            // return Content("Hello World");
            // return HttpNotFound();
            //return new EmptyResult();
            return RedirectToAction("Index", "Home", new { page = 1, sortBy = "name" });
        }
        public ActionResult Edit(int id)
        {
            return Content("id=" + id);
        }
        [Route("Movies/released/{year}/{month:regex(\\d{2)}")]
        public ActionResult ByReleaseYear(int year,int month)
        {
            return Content(year+"/"+ month);
        }
    }
}

Тем не менее, я продолжаю получать

Ошибка HTTP 404.0 - Не найдено для таких URL, как

http://localhost:51946/Movies/released/1243/12

Ответы [ 3 ]

1 голос
/ 19 сентября 2019

Вы пропустили одну скобку в регулярном выражении.Вместо "released/{year}/{month:regex(\\d{2)}" это должно быть "Movies/released/{year}/{month:regex(\\d{2})}".

, поэтому будет работать следующий атрибут:

[Route("Movies/released/{year}/{month:regex(\\d{2})}")]
1 голос
/ 19 сентября 2019

Согласно ответу @Random, проблема 404 не найдена была решена.Но чтобы решить, какое ограничение на число цифр не будет применено на вашем маршруте, ваше регулярное выражение должно выглядеть следующим образом:

{month:regex(^\\d{2}$)}

В этом ^ и $ отмечены начало и конецstring.

Ваше исходное регулярное выражение для месяца соответствует 2 цифрам в любом месте, но не требует, чтобы оно было только 2 цифрами.

0 голосов
/ 19 сентября 2019

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

[Route("released/{year}/{month:regex(\\d{2)}")]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...