ASP.NET Core中如何从外部项目返回视图?NuGet包场景实现
需求可行性及实现方案
完全可行,这是ASP.NET Core视图查找机制天然支持的典型场景,具体实现步骤如下:
NuGet包侧无需额外修改:你现有的控制器代码可以直接打包,ASP.NET Core的视图引擎会自动在使用者项目的标准视图目录中查找名为
SomeView的视图文件。使用者项目的视图实现要求:
- 若你的控制器是
TestController,使用者只需在自己项目的Views/Test/目录下创建SomeView.cshtml文件并编写视图逻辑即可; - 如果希望视图能被多个控制器共享,也可以放在
Views/Shared/目录下,视图引擎会优先查找控制器专属目录,再查找共享目录。
- 若你的控制器是
可选:给使用者提供视图模板:
可以在NuGet包中添加一个示例视图模板(比如命名为SomeView.Template.cshtml),将其设置为随包安装时复制到使用者项目的Views/Test/目录下,使用者只需重命名并修改模板内容即可快速实现视图。可选:添加视图存在性校验(避免报错):
为了防止使用者未实现视图时出现找不到视图的错误,可以在控制器方法中添加校验逻辑,示例代码如下:
[HttpGet] public IActionResult Test() { var viewEngine = HttpContext.RequestServices.GetRequiredService<ICompositeViewEngine>(); var viewLookupResult = viewEngine.FindView(ControllerContext, "SomeView", isMainPage: false); if (!viewLookupResult.Success) { return Content("请先在项目中实现名为SomeView的视图文件"); // 也可以返回NotFound、自定义错误视图等 } return View("SomeView"); }
内容的提问来源于stack exchange,提问作者Szyszka947
相关产品推荐
相关产品推荐

