angularjs with cshtml page only not html pages with web api 2

前端 未结 1 978
情深已故
情深已故 2020-12-18 05:55

I\'m having asp. net mvc4 project. Angularjs is integrated. I have already built HTML pages and WEB APIs 2 as per previous requirements.

Now for some reason i hav

相关标签:
1条回答
  • 2020-12-18 06:47

    Well, this is how I use it.

    There is index.cshtml like this

    @using System.Web.Optimization
    @inherits System.Web.Mvc.WebViewPage
    @{ Layout = null; }<!DOCTYPE html>
    <html data-ng-app="MyProject">
    <head>
        <title data-ng-controller="TitleCtrl" data-ng-bind="Title">My Project</title>
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <meta http-equiv="cache-control" content="max-age=0" />
        <meta http-equiv="cache-control" content="no-cache" />
        <meta http-equiv="expires" content="0" />
        <meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
        <meta http-equiv="pragma" content="no-cache" />
    
        @Styles.Render("~/Content/min/css")
    </head>
    <body class="body" id="body">
    
        <div class="body" data-ui-view="body"></div>
    
        @Scripts.Render("~/js/angular")
        @Scripts.Render("~/js/MyProject")
    </body>
    </html>
    

    NOTE: using angular UI-Router, that's why ui-view is in palce

    But still there must be HomeController:

    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            // below I do some tricks to make app running on 
            // http://mydomain/app as well as on
            // http://mydomain/app/  (see the / at the end)
    
            var root = VirtualPathUtility.ToAbsolute("~/");
            var applicationPath = Request.ApplicationPath;
            var path = Request.Path;
            var hasTraillingSlash = root.Equals(applicationPath
                                          , StringComparison.InvariantCultureIgnoreCase)
                    || !applicationPath.Equals(path
                                          , StringComparison.InvariantCultureIgnoreCase);
            if (!hasTraillingSlash)
            {
                return Redirect(root + "#");
            }
    
            // my view is not in Views, but in the root of a web project
            return View("~/Index.cshtml");
        }
    }
    

    So, this way I can use power of Bundle configureation (javascript, css) ... while starting angular at http://mydomain/app or http://mydomain/app/. Check also similar here

    Also in global.asax, we should configura ASP.NET MVC:

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.IgnoreRoute("fonts*.woff");
    
        routes.MapRoute(
          name: "Default",
          url: "{controller}/{action}/{id}",
          defaults: new {controller = "Home", action = "Index", id =UrlParameter.Optional}
        );
    }
    

    while web API should be:

    const string IdPattern = @"\d+|[A-Za-z]{1,2}";
    public static void SetRouting(HttpConfiguration config)
    {
        // some custom routes
        ...            
    
        // and a default one
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}"
            , constraints: new { id = IdPattern }
            , defaults: new { id = RouteParameter.Optional }
        );
    
    0 讨论(0)
提交回复
热议问题