gpt4 book ai didi

asp.net-core-mvc - 在 ASP.NET MVC 中自动切换 AMP 的 View

转载 作者:行者123 更新时间:2023-12-04 01:58:17 24 4
gpt4 key购买 nike

我想使用 .NET Core 2.0 在 ASP.NET MVC 中创建我的网站的 AMP 版本。以前我曾在 .Net 框架上使用 DisplayModeProvider 实例做过一些工作,但这似乎不是 .NET Core 中的一个选项。

我想做的是在我的 URL 以 开头时将 View 名称更改为 index.amp.cshtml 而不是 index.cshtml/放大器。在 .NET Core 中实现此目标的最佳方法是什么?

最佳答案

您可以使用 IViewLocationExpander 执行类似的操作。碰巧的是,几天前我正在玩这个,所以我手头有一些代码示例。如果你创建这样的东西:

public class AmpViewLocationExpander : IViewLocationExpander
{
public void PopulateValues(ViewLocationExpanderContext context)
{
var contains = context.ActionContext.HttpContext.Request.Query.ContainsKey("amp");
context.Values.Add("AmpKey", contains.ToString());

var containsStem = context.ActionContext.HttpContext.Request.Path.StartsWithSegments("/amp");
context.Values.Add("AmpStem", containsStem.ToString());
}

public IEnumerable<string> ExpandViewLocations(ViewLocationExpanderContext context, IEnumerable<string> viewLocations)
{
if (!(context.ActionContext.ActionDescriptor is ControllerActionDescriptor descriptor)) { return viewLocations; }

if (context.ActionContext.HttpContext.Request.Query.ContainsKey("amp")
|| context.ActionContext.HttpContext.Request.Path.StartsWithSegments("/amp")
)
{
return viewLocations.Select(x => x.Replace("{0}", "{0}.amp"));
}

return viewLocations;
}
}

iViewLocationExpander can be found in Microsoft.AspNetCore.Mvc.Razor

然后在 Startup.csConfigure Services 方法中,添加以下内容:

  services.Configure<RazorViewEngineOptions>(options =>
{
options.ViewLocationExpanders.Add(new AmpViewLocationExtender());
});

这将做的是更新每个请求的 View 位置,以在任何时候 URL 以 /amp 开头时在 .cshtml 之前插入 .amp > 或有 amp 的查询字符串键。如果您的 AMP View 不存在,它可能会有点崩溃,我还没有对其进行全面测试,但它应该可以帮助您入门。

关于asp.net-core-mvc - 在 ASP.NET MVC 中自动切换 AMP 的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49127913/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com