使用cshtml页面的angularjs不是带有web api 2的html页面

mic*_*yks 5 asp.net-mvc asp.net-mvc-routing asp.net-mvc-4 asp.net-web-api angularjs

我有asp.net mvc4项目.Angularjs是一体化的.我已经按照以前的要求构建了HTML页面和WEB API 2.

现在由于某种原因,我必须使用CSHTML页面.以前我只有web api项目模板所以我不能用cshtml页面,因为只有MVC控制器可以返回部分页面(cshtml),但我只使用web apis ...

所以改变了整个项目模板,所以现在我可以拥有mvc控制器......

总之,目前我已经建立了web apis和html页面的mvc4项目.....

我只是想使用CSHTML页面而不是使用HTML页面休息的东西应该是它们......

可能吗?

我可能听起来很傻但现在需要它.帮助将不胜感激......

仅限Web apis,cshtml页面和angularjs.不是web apis,html pages和angularjs.

如果我html根据cshtml, 角度路线如何影响来替换页面?

Rad*_*ler 4

嗯,这就是我的使用方式。

index.cshtml这样的

@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>
Run Code Online (Sandbox Code Playgroud)

注意:使用 Angular UI-Router,这就是为什么ui-viewis in place

但仍然必须有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");
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,这样我就可以使用捆绑配置(javascript,css)的力量......同时在http://mydomain/app或 处启动角度http://mydomain/app/在这里也检查类似

同样在 global.asax 中,我们应该配置 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}
    );
}
Run Code Online (Sandbox Code Playgroud)

而网络 API 应该是:

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 }
    );
Run Code Online (Sandbox Code Playgroud)