2016-07-29 12 views
0

I Aktionsmethode in meiner Heimsteuerung wie dieseMVC URL Umschreiben

[HttpGet]   
     public ActionResult Login() 
     { 
      return View(); 
     } 

Anmeldung habe ich diese Aktion Methode als Startseite meiner Bewerbung habe, aber ich will es so neu schreiben www.abc.com/MySite/security/login

schreibe ich dieses Attribut nach [HttpGet]

[Route("MySite/security/Login")] 

Nun das Problem ist, wenn ich die Anwendung laufen lasse, its me gibt er ror

The resource cannot be found. 

Das ist mein RoutConfig

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 = "Login" , id = UrlParameter.Optional } 
     ); 


     } 

Wie kann ich dieses Problem zu beheben, auch mit Httppost gleichnamige Methode Ich habe Attribut sollte ich muss Rout auch auf sie Attribut schreiben?

Antwort

0

Dies sollte die Arbeit machen:

[RoutePrefix("MySite/Security")] 
    public class HomeController : Controller 
    { 
     public ActionResult Index() 
     { 
      return View(); 
     } 

     [HttpGet] 
     [HttpPost] 
     [Route("Login")] 
     public ActionResult Login() 
     { 
      return View("~/Views/Home/Index.cshtml"); 
     } 
    } 

EDITED:

Es gibt einen Weg, aber ich bin mir nicht sicher, ob es der beste Weg ist. Sie benötigen einen anderen Controller default so aufgerufen zu erstellen:

public class DefaultController : Controller 
    { 
     // 
     // GET: /Default/ 
     public ActionResult Index() 
     { 
      return RedirectToAction("Login","Home"); 
     } 
    } 

In Ihrem RouteConfig.cs, ändern Sie die 'Standard' Route mit diesem:

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

Dies sollte die Arbeit machen. Ich versuche immer noch, andere bessere Wege zu finden.

+0

Was ist mit Post-Attribut Aktionsmethode? –

+0

Ich habe meine Antwort bearbeitet. Sie können sowohl Get- als auch Post-Attribute in einer Aktion hinzufügen, die ich an meinem Ende markiert habe und es funktioniert. –

+0

Eine weitere Sache, mein Controller-Name ist Home, nicht Sicherheit –

0

Zunächst sollten Sie eine benutzerdefinierte Route oben auf einer Standardroute hinzufügen, da Sie über zwei Aktionsmethoden mit unterschiedlichen HTTP-Protokollen verfügen und ein benutzerdefiniertes Routing mit demselben Aktionsnamen vornehmen möchten.

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

    // custom route 
    routes.MapRoute(
      name: "Login", 
      url: "MySite/{controller}/{action}/{id}", 
      defaults: new { controller = "Security", action = "Login", id = UrlParameter.Optional } 
    ); 

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

Beachten Sie, dass Ihr Controller mit Login Methode sollte SecurityController benannt werden, dann können Sie Attribut Routing wie dieser Code gesetzt:

// set all default prefix to /Security path 
[RoutePrefix("Security")] 
public class SecurityController : Controller 
{ 
    [Route("Login")] 
    public ActionResult Login() 
    { 
     return View(); 
    } 
} 

Darüber hinaus stellen Sie sicher, dass Sie bereits registriert die Route in Global.asax-Datei .

Alle Verbesserungen & Anregungen willkommen.