我现在使用.net core razor page进行页面布局,一套PC视图及H5视图,想根据访问设备标识,渲染PC或H5不知道在那里扩展?
如:PC 对于页面 /Pages/ Index.cshtml ,移动端对应 /Mobile/index.cshtml
在 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
你好,我想通过 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;
}
}
@DotNet-攻城狮: 参考之前的博问 ASP.NET Core 中如何实现动态路由
比如,我有个文章页面,要支持手机和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);
}
推荐阅读
感谢,感觉应该还有更优的方案,想通过路由适配的时候改变试图,因为PC跟H5对应的CS文件有不同的的业务逻辑。
View(??)——所有重载,都给的虚函数。
所有重载最终指向以下函数:
public virtual ViewResult View(string viewName, object model)
当然还有其他环节也都可以篡改。
怕是搞反了?
我记得是前端识别代理是电脑还是pad还是mobile,自动跳转到对应的不同前端登录页面,后端或者API用同一个。
没有就是需要URL地址不变的情况下,服务端根据终端,选择不同路由地址。
如Razor Page:PC 对于页面 /Pages/ Index.cshtml ,移动端对应 /Mobile/Pages/index.cshtml