2016-05-25 10 views
0

Bevor ich diese Frage gestellt habe, habe ich auch viele Beispiele gesucht und ausprobiert.MVC4 AngularJS Entfernen von # von URLs in Bereichen Anwendungen

Für mein Problem gab es eine ähnliche POST Aber es funktioniert auch nicht.

Dies ist die Struktur meiner gesamten Anwendung:

Hier ist die Struktur der Admin-Bereich:

Areas Structure

Projekt hat zwei Anwendungen Jetzt One For-Client und eine andere für Admin: Admin wird durch Bereiche verwaltet

Ich habe Angular 1.3.5 verwendet und es wird innerhalb der Bereiche verwendet.

Die Landing Page Index Seite von Home Controller Path: - Bereiche/Admin/Ansichten/Home/Index.cshtml

Das Layout ist _Layout Pfad: Flaechen/Admin/Ansichten/Shared/_Layout.cshtml

RouteConfig.cs Datei Innen App_Start Folder:

namespace StockManagment 
{ 
    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 = "Home", action = "Index", id = UrlParameter.Optional }, 
       namespaces : new []{"StockManagment.Controllers"} 
      ); 
     } 
    } 
} 

AdminAreaRegistration.cs

namespace StockManagment.Areas.Admin 
{ 
    public class AdminAreaRegistration : AreaRegistration 
    { 
     public override string AreaName 
     { 
      get 
      { 
       return "Admin"; 
      } 
     } 

     public override void RegisterArea(AreaRegistrationContext context) 
     { 
      context.MapRoute(
       "Admin_default", 
       "Admin/{controller}/{action}/{id}", 
       new { action = "Index", id = UrlParameter.Optional }, 
       new [] {"StockManagment.Areas.Admin.Controllers"} 
      ); 
     } 
    } 
} 

HTML5MODE Für # Formular URL

myApp.config(["$locationProvider", function ($locationProvider) { 
    $locationProvider.html5Mode(true); 
}]); 

Basis-Tag in _Layout Seite entfernen:

<base href="/"> 

Web.config Code Of Admin Areas

<rewrite> 
    <rules> 
    <rule name="Main Rule" stopProcessing="true"> 
     <match url=".*" /> 
     <conditions logicalGrouping="MatchAll"> 
     <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
     <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
     </conditions> 
     <action type="Rewrite" url="/" /> 
    </rule> 
    </rules> 
</rewrite> 

Wenn ich Versuchen Sie es mit Admin Side To Access Diese URL: http://localhost:8917/Admin/Home/Index

I t Lädt die Website unter: localhost: 8917/

Und wenn ich aktualisieren die Seite lädt es den ursprünglichen Inhalt, d. h. die Client-Seite Home Page.

Wohin gehe ich falsch?

Dank im Voraus ...

Edit 1:

i den Rewrite-Code in Web entfernt.config-i verwenden es, weil ich es sah in einem anderen Beitrag

vor der Verwendung

myApp.config(["$locationProvider", function ($locationProvider) { 
    $locationProvider.html5Mode(true); 
}]); 

und

<base href="@Request.Url.AbsolutePath" /> 

Admin-Seite Startseite die URL zuzugreifen war: - http://localhost:8917/Admin/Home/Index#/

nach dem Hinzufügen Der obige Code ist: - http://localhost:8917/Admin/Home/

ac beitung Kategorien Seite

Kategorien vor Code: - http://localhost:8917/Admin/Home/Index#/Categories

Kategorien nach Code: - http://localhost:8917/Admin/Home/Categories

, wenn ich es aktualisieren Fehler

Server-Fehler gibt in Anwendung '/'. Die Ressource kann nicht gefunden werden. Beschreibung: HTTP 404. Die Ressource, nach der Sie suchen (oder eine ihrer Abhängigkeiten), wurde möglicherweise entfernt, der Name wurde geändert oder ist vorübergehend nicht verfügbar. Bitte überprüfen Sie die folgende URL und vergewissern Sie sich, dass sie richtig geschrieben ist.

Angeforderte URL:/Admin/Home/Kategorien

+0

Ich denke, es ist wegen der Basis-URL, versuchen Sie es mit content.url - http://stackoverflow.com/questions/23998867/angular-app-on-iis-8-x-virtual-directory-has-strange- URL-Verhalten/23999511 # 23999511 oder base href = "@ Request.Url.AbsolutePath "/> –

+0

@ ZivWeissman funktioniert und entfernt die # von der URL, aber wenn ich es aktualisiere gibt Fehler – 3gth

+0

Ich habe das gleiche Problem, haben Sie eine Lösung gefunden? – kbaccouche

Antwort

0

Ich bin nicht sicher, warum Sie die Rewrite-Regel verwenden, das kann ich vorstellen, mit dem Routing versuchen, mit MVC zu tun stören würden Sie. Ich würde empfehlen, die URL-Rewrite-Regel aus der web.config zu entfernen.

Wenn Sie eine Sammlung von Routen erstellen möchten, die der Aktion "Index" im Admin-Bereich zugeordnet werden sollen (sodass verschiedene URLs zu Ihrem angularen SPA gelangen), verwenden Sie eine Platzhalter-MVC-Route.

z.B.

// Route override to work with Angularjs and HTML5 routing 
    context.MapRoute(
     name: "Application1Override", 
     url: "Application1/{*.}", 
     defaults: new { controller = "Application1", action = "Index" } 
    ); 
+0

ich versuchte es so in der admin bereich registrierung es funktioniert nicht es gibt fehler zu – 3gth

+0

admin ist ein bereich in der anwendung wo ich benutze angularjs es hat seine eigenen controller modelle und views und routing Bei Verwendung von base href und html5mode wird der Admin-Bereich auf der Root-Seite geladen, wo der Client geladen werden soll iter content – 3gth

+0

Wenn Sie für eine Sekunde Winkel aus der Gleichung nehmen, können Sie bestätigen, ob Ihre Wildcard-Route in MVC funktioniert. Führen alle Routen zu Admin/* Sie zu Ihrer Indexseite (wobei der eckige Teil vorerst deaktiviert ist)? – MIP1983

0

In Ihrem ersten Problem hatte man

<base href="/" /> 

die Winkel sagt, dass die grundlegende Routing "/", so wird es die href an der Basis ("/") ändern, wenn Sie die neu zu laden Seite wird MVC Sie zu "/" führen, was Ihre Root-Aktion ist.

Wenn Sie ändern zu -

<base href="@Request.Url.AbsolutePath" /> 

Winkel werden die Basis dieser Seite ist Ihre aktuelle {Aktion}/{Controller}

Jetzt haben Sie ein anderes Problem mit dem Routing wissen:

namespace StockManagment.Areas.Admin 
{ 
    public class AdminAreaRegistration : AreaRegistration 
    { 
     public override string AreaName 
     { 
      get 
      { 
       return "Admin"; 
      } 
     } 

    public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.MapRoute(
      "Admin_default", 
      "Admin/{controller}/{action}/{id}", // your current url= /Admin/Home/Categories -- which means id = Categories 
      new { action = "Index", id = UrlParameter.Optional }, 
      new [] {"StockManagment.Areas.Admin.Controllers"} 
     ); 
    } 
}} 

Wenn Sie keine ID benötigen, können Sie diesen Code verwenden:

public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.MapRoute(
      "Admin_default", 
      "Admin/{controller}/{action}/{*angular}", 
      new { action = "Index", 
      new [] {"StockManagment.Areas.Admin.Controllers"} 
     ); 
    } 
Verwandte Themen