2017-07-01 15 views
2

ほかにも数多くの質問があっても、この作業を行うことはできません。ここに私のコントローラは、(エンティティフレームワークを使用して作成)Route MVC ASP.Netはうまく動作しません

namespace mypage.Controllers 
{ 
    [RoutePrefix("Booking")] 
    public class BookingsController : BaseController 
    { 
     private mypageContext db = new mypageContext(); 

     // GET: Bookings 
     public ActionResult Index() 
     { 
      var model = db.Bookings.ToList(); 
      //model.Find() 
      return View(model); 
     } 
// etc. 

私のGlobal.asax

public class MvcApplication : System.Web.HttpApplication 
{ 
    protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
     BundleConfig.RegisterBundles(BundleTable.Bundles); 
     Database.SetInitializer<mypageContext>(new DropCreateDatabaseIfModelChanges<mypageContext>()); 
    } 
} 

そしてrouteconfig.cs

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 } 
     ); 
    } 
} 

http://localhost:xxxxx/Booking しかし、これを開くときに、私はいつも404を得ることです作品http://localhost:xxxxx/Bookings

isr他の場所を調べる?

PS:BaseControllerはちょうど空の

public abstract class BaseController : Controller 
{ 

} 

で編集

私はしかし定期プレフィックスを追加する代わりにRoutePrefix場合、それはすべてのいずれか

[Route("Booking/New")] 
public ActionResult Edit(int? id) 
では動作しません。

答えて

2

tにはRouteの属性を指定する必要がありますコントローラーの属性をRoutePrefixと指定すると、そのアクションが実行されます。

[RoutePrefix("TestPrefix")] 
public class TestController : Controller 
{ 
    [Route("TestAction")] 
    public ActionResult TestAction() 
    { 
     //......... 
     return View(); 
    } 
} 
+2

これは実際にはうまくいきました。すべてのアクションに '[Route(" ThisAction ")]'を追加する必要が本当にありますか? – rst

+2

コントローラを '[RoutePrefix(" Booking ")、Route(" {action} ")]'でマークすることができ、すべてのアクションでコントローラを必要としません。多くの例がここにあります[ASP.NET MVC 5の属性ルーティング](https://blogs.msdn.microsoft.com/webdev/2013/10/17/attribute-routing-in-asp-net-mvc-5/) – Jasen

+0

ここに '[Route(" test ")]'アクションを追加すると、 'HTTP Error 400.0 - Bad Request'というメッセージが表示されます。 – rst