2016-05-10 7 views
1

SalaamBenutzername Mutiple MapRoute funktioniert nicht

Ich habe versucht, mehrere MapRoute zu verwenden, aber ich bin nicht erfolgreich zu bekommen. Mein Szenario: Ich arbeite an einem Projekt, bei dem der Benutzer Profile erstellt und dann die öffentliche Vorschau des Profils anzeigt.

Für öffentliches Profil bis jetzt war ich mit Standard id Beispiel:

https://localhost:44300/Profile/DoctorProfile/alijamal14

hier 'Profil' ist {controller} und 'DoctorProfile' ist {action} und 'alijamal14' ist {id} und diese funktioniert einwandfrei

Ich möchte einen Benutzernamen Route, die auch ohne m funktionieren würde die gleiche erreichen ention der Controller und die Aktion

https://localhost:44300/alijamal14

Weitere Informationen unter ich meine Rout.Config.cs erwähne

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

namespace DoctorSearchEngine 
{ 
    public class RouteConfig 
    { 
     public static void RegisterRoutes(RouteCollection routes) 
     { 
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

      routes.MapRoute(
       name: "Default", 
       url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Doctor", action = "Search", id = UrlParameter.Optional }, 
       namespaces: new[] { "DoctorSearchEngine.Controllers" } 
      ); 

      routes.MapRoute(
       name: "Users", 
       url: "{username}", 
       defaults: new { controller = "Profile", action = "DoctorProfile", username = UrlParameter.Optional }, 
       namespaces: new[] { "DoctorSearchEngine.Controllers" } 
      ); 
     } 
    } 
} 

ich diese Störung erhalte

Server Fehler in '/' Anwendung.

Die Ressource kann nicht gefunden werden.

Beschreibung: HTTP 404. Die Ressource, nach der Sie suchen (oder eine der Abhängigkeiten), könnte entfernt worden sein, der Name wurde geändert oder ist vorübergehend nicht verfügbar. Bitte überprüfen Sie die folgende URL und machen Sie sicher, dass es richtig geschrieben ist.

Angeforderte URL:/alijamal14

Versionsinformationen: Microsoft .NET Framework Version: 4.0.30319; ASP.NET Version: 4.6.1055.0

Wenn ich zum ersten Mal MapRoute-Code localhost Kommentar aus: 44300/Profil/DoctorProfile/alijamal14 funktioniert, aber andere Controller und Aktionen stoppen wird

arbeiten, wie ich Benutzernamen erreichen kann, nachdem Website-Domänenname Link zusammen mit Standard-Route-Funktionalität?

Dank

+0

Sie kann nicht (die Reihenfolge der Routen tauschen könnte machen 'https: // localhost : 44300/alijamal14' aber dann würde nichts anderes mehr). Sie benötigen Soothing, um die Routen identifizierbar zu machen –

Antwort

2

können Sie Attribute Routing verwenden, um die URL-Parameter-Konfiguration des Controllers zu bewegen.Routing

Attribut aktivieren:

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

     routes.MapMvcAttributeRoutes(); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Doctor", action = "Search", id = UrlParameter.Optional }, 
      namespaces: new[] { "DoctorSearchEngine.Controllers" } 
     ); 

    } 

Jetzt können Sie Attribut wie folgt verwenden:

public class ProfileController : Controller 
{  
    [Route("{username}")] 
    public ActionResult DoctorProfile(string username){ 
    ...... 
    } 
} 
Verwandte Themen