目前使用重定向的 MVC Action 代码是这么实现的:

public IActionResult SignUp()
{
    var userAgent = Request.Headers["User-Agent"].FirstOrDefault();
    if(!string.IsNullOrEmpty(userAgent) && Regex.IsMatch(userAgent, @"MSIE [1-9]\."))
    {
        return Redirect("/iealert");
    }

    //...
}

最佳答案:

终于搞定了!实现代码如下:

public async Task<IActionResult> SignUp()
{
    var userAgent = Request.Headers["User-Agent"].FirstOrDefault();
    if (!string.IsNullOrEmpty(userAgent) && Regex.IsMatch(userAgent, @"MSIE [1-9]\."))
    {
        var executor = HttpContext.RequestServices.GetRequiredService<ViewResultExecutor>();
        var view = _viewEngine.GetView(null, "~/Pages/IeAlert.cshtml", true)?.View;
        if (view != null)
        {
            using (view as IDisposable)
            {
                await executor.ExecuteAsync(ControllerContext, view, ViewData, TempData, "text/html; charset=utf-8", 200);
            }
            return new EmptyResult();
        }
    }
}

可以直接 return View("view name")

 

额,抱歉,你这个是Razor Page。。如果iealert中没有特别的渲染,可以考虑用return Content("读取iealert的内容")这种做法。

貌似现在需要自己定义一个中间件,然后接管路由中关于某些page。

最新的Razor引擎可以比较简单的解析razor page,然后将其动态编译、缓存,再执行。

不知道MS对这种需求感不感兴趣。


其他回答:

_viewEngine 是通过构造函数依赖注入 IRazorViewEngine

不用构造函数依赖注入 IRazorViewEngine 的实现版本

public async Task<IActionResult> SignUp()
{
    var userAgent = Request.Headers["User-Agent"].FirstOrDefault();
    if (!string.IsNullOrEmpty(userAgent) && Regex.IsMatch(userAgent, @"MSIE [1-9]\."))
    {
        var services = HttpContext.RequestServices;
        var executor = services.GetRequiredService<ViewResultExecutor>();
        var viewEngine = services.GetRequiredService<IRazorViewEngine>();
        var view = viewEngine.GetView(null, "~/Pages/IeAlert.cshtml", true)?.View;
        if (view != null)
        {
            using (view as IDisposable)
            {
                await executor.ExecuteAsync(ControllerContext, view, ViewData, TempData, "text/html; charset=utf-8", 200);
            }
            return new EmptyResult();
        }
    }
    //...
}

@dudu: 太棒了,不过也真够折腾的。

微信扫描右侧二维码并关注,回复“暗号”,获取暗号在此输入并点“获取”按钮。
暗号: