首页 新闻 会员 周边 捐助

.net core razor page 怎么扩展路由,根据设备渲染PC或H5视图?

0
悬赏园豆:180 [待解决问题]

我现在使用.net core razor page进行页面布局,一套PC视图及H5视图,想根据访问设备标识,渲染PC或H5不知道在那里扩展?
如:PC 对于页面 /Pages/ Index.cshtml ,移动端对应 /Mobile/index.cshtml

DotNet-攻城狮的主页 DotNet-攻城狮 | 初学一级 | 园豆:19
提问于:2022-03-22 00:39
< >
分享
所有回答(4)
0

在 stackoverflow 上有人问了类似的问题:How Do I Use 51 Degrees Mobile Device Detection with a Razor Page?,建议试试 DeviceDetector.NET 进行设备识别

这种场景建议使用 mvc,如果一定要使用 razor page,可以使用 RedirectToPageResult,参考 Action Results in Razor Pages

dudu | 园豆:29570 (高人七级) | 2022-03-22 08:50

你好,我想通过 DynamicRouteValueTransformer 改变路由视图还是不生效,不能这么操作吗?

public class AdaptiveTransformer : DynamicRouteValueTransformer
{
    public override async ValueTask<RouteValueDictionary> TransformAsync(HttpContext httpContext, RouteValueDictionary values)
    {
        //var endpoint = httpContext.GetEndpoint();
        if (httpContext.Request.IsMobileBrowser())
        {
            return await Task.Run(() => new RouteValueDictionary
            {
                {"area","Mobile"},
                { "page", "/Index" }
            });
        }
        return values;
    }
}
支持(0) 反对(0) DotNet-攻城狮 | 园豆:19 (初学一级) | 2022-03-26 01:32

@DotNet-攻城狮: 参考之前的博问 ASP.NET Core 中如何实现动态路由

支持(0) 反对(0) dudu | 园豆:29570 (高人七级) | 2022-03-26 06:51
0

比如,我有个文章页面,要支持手机和PC展示
PC上的是 Artitcle.cshtml
手机上是 ArtitcleMobile.cshtml

可以这样写:

[HttpGet("Article/{aricleId}")]
        public async Task<IActionResult> Artitcle(long aricleId = 0)
        {
            ArticleViewModel articleVM = new ArticleViewModel();
	   //判断是设备
	   bool isMobile = _device.Type == DeviceType.Mobile;

             //这里的逻辑可以自己扩展
             if (!isMobile)
                    return View(bookVM);
                else
                    return View("ArtitcleMobile", bookVM);
		}

推荐阅读

楠木大叔 | 园豆:2083 (老鸟四级) | 2022-03-22 12:46

感谢,感觉应该还有更优的方案,想通过路由适配的时候改变试图,因为PC跟H5对应的CS文件有不同的的业务逻辑。

支持(0) 反对(0) DotNet-攻城狮 | 园豆:19 (初学一级) | 2022-03-22 22:06
0

View(??)——所有重载,都给的虚函数。

所有重载最终指向以下函数:

public virtual ViewResult View(string viewName, object model)

当然还有其他环节也都可以篡改。

花飘水流兮 | 园豆:13617 (专家六级) | 2022-03-23 14:09
0

怕是搞反了?
我记得是前端识别代理是电脑还是pad还是mobile,自动跳转到对应的不同前端登录页面,后端或者API用同一个。

LiveCoding | 园豆:502 (小虾三级) | 2022-04-11 16:38

没有就是需要URL地址不变的情况下,服务端根据终端,选择不同路由地址。
如Razor Page:PC 对于页面 /Pages/ Index.cshtml ,移动端对应 /Mobile/Pages/index.cshtml

支持(0) 反对(0) DotNet-攻城狮 | 园豆:19 (初学一级) | 2022-04-11 23:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册