加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

AngularJS与System.Web.Routing

发布时间:2020-12-17 17:48:51 所属栏目:安全 来源:网络整理
导读:这是一个关于AngularJS应用程序路由的问题.它没有使用MVC,它确实使用WebAPI作为后端(这些路由工作正常). 我使用VS SPA模板作为基线:http://visualstudiogallery.msdn.microsoft.com/5af151b2-9ed2-4809-bfe8-27566bfe7d83 我遇到的问题是我的DefaultRouteHa
这是一个关于AngularJS应用程序路由的问题.它没有使用MVC,它确实使用WebAPI作为后端(这些路由工作正常).

我使用VS SPA模板作为基线:http://visualstudiogallery.msdn.microsoft.com/5af151b2-9ed2-4809-bfe8-27566bfe7d83

我遇到的问题是我的DefaultRouteHandler似乎总是在我的角度定义路线之前被击中.例如,我有一个/ wageagreement / new的路由,但.cshtml文件位于/ views / wageagreement / detail中.我的角度路线在app.js中定义如下:

$stateProvider
        .state('wageagreement-new',{
            url: '/wageagreement/new',templateUrl: '/views/wageagreement/detail',controller: 'wageAgreementDetailsCtrl'
        })

如果我转到页面/ wageagreement / new,我的DefaultRouteHandler(见下文)首先被命中,文件路径是/ wageagreement / new.由于此文件不存在,我收到404错误.然后我的角度路径似乎开始,页面从/ view / wageagreement / detail加载得很好.因此,对于每个页面,我得到错误404闪烁然后我得到正确的页面.有没有办法让这项工作?我开始认为我的.cshtml文件可能必须与我的路线相匹配才能使其正常工作.

public class DefaultRouteHandler : IRouteHandler
{
    public IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
        // Use cases:
        //     ~/            -> ~/views/index.cshtml
        //     ~/about       -> ~/views/about.cshtml or ~/views/about/index.cshtml
        //     ~/views/about -> ~/views/about.cshtml
        //     ~/xxx         -> ~/views/404.cshtml
        var filePath = requestContext.HttpContext.Request.AppRelativeCurrentExecutionFilePath;

        if (filePath == "~/")
        {
            filePath = "~/views/touranalysis/index.cshtml";
        }
        else
        {
            if (!filePath.StartsWith("~/views/",StringComparison.OrdinalIgnoreCase))
            {
                filePath = filePath.Insert(2,"views/");
            }

            if (!filePath.EndsWith(".cshtml",StringComparison.OrdinalIgnoreCase))
            {
                filePath = filePath += ".cshtml";
            }
        }

        var handler = WebPageHttpHandler.CreateFromVirtualPath(filePath); // returns NULL if .cshtml file wasn't found

        if (handler == null)
        {
            requestContext.RouteData.DataTokens.Add("templateUrl","/views/404");
            handler = WebPageHttpHandler.CreateFromVirtualPath("~/views/404.cshtml");
        }
        else
        {
            requestContext.RouteData.DataTokens.Add("templateUrl",filePath.Substring(1,filePath.Length - 8));
        }

        return handler;
    }
}

解决方法

VS SPA模板( http://visualstudiogallery.msdn.microsoft.com/5af151b2-9ed2-4809-bfe8-27566bfe7d83)正在进行双重路由.这还不够.这是错的.除了根链接之外,非直接链接不起作用.

如果你想使用Angular路由,你所要做的就是使DefaultRouteHandler类看起来像这样

public class DefaultRouteHandler : IRouteHandler
{
    public IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
        return WebPageHttpHandler.CreateFromVirtualPath("~/views/index.cshtml");
    }
}

Basicaly重新路由到Angular主页,让Angular路由完成工作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读