_viewStart.cshtml 不继承 Web api 2.0 应用程序中的 System.Web.WebPages.StartPage
_viewStart.cshtml does not inherit System.Web.WebPages.StartPage in web api 2.0 application
我有一个 web api 2.0 应用程序,我想添加视图处理。
我正在使用 postal.mvc5 并想从应用程序中发送电子邮件。
我已经解决了常规控制器路由问题,现在要解决最后一个错误。
用Postal.Mvc5实现的_ViewStart.cshtml页面是:
@{
Layout = null;
}
我的 web.config 视图文件夹中的页面:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web.webPages.razor>
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc"/>
<add namespace="System.Web.Mvc.Html"/>
<add namespace="System.Web.Optimization"/>
<add namespace="Postal" />
</namespaces>
</pages>
</system.web.webPages.razor>
</configuration>
我得到的错误是:
Type 'ASP._Page_Views_Emails__ViewStart_cshtml' does not inherit from
'System.Web.WebPages.StartPage'.
完整的错误是:
Source: System.Web ----Target Site: CheckAssignableType Timestamp: 10/23/2017 3:05:48 PM Message: Type 'ASP._Page_Views_Emails__ViewStart_cshtml' does not inherit from 'System.Web.WebPages.StartPage'. ----StackTrace: at System.Web.UI.Util.CheckAssignableType(Type baseType, Type type) at System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(VirtualPath virtualPath, Type requiredBaseType, HttpContext context, Boolean allowCrossApp) at System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(String virtualPath, Type requiredBaseType) at System.Web.WebPages.BuildManagerWrapper.CreateInstanceOfType[T](String virtualPath) at System.Web.WebPages.VirtualPathFactoryExtensions.CreateInstance[T](IVirtualPathFactory factory, String virtualPath) at System.Web.WebPages.VirtualPathFactoryManager.CreateInstanceOfType[T](String virtualPath) at System.Web.WebPages.VirtualPathFactoryExtensions.CreateInstance[T](IVirtualPathFactory factory, String virtualPath) at System.Web.WebPages.StartPage.GetStartPage(WebPageRenderingBase page, IVirtualPathFactory virtualPathFactory, String appDomainAppVirtualPath, String fileName, IEnumerable1 supportedExtensions) at System.Web.WebPages.StartPage.GetStartPage(WebPageRenderingBase page, String fileName, IEnumerable
1 supportedExtensions) at System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance) at System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer) at Postal.EmailViewRenderer.RenderView(IView view, ViewDataDictionary viewData, ControllerContext controllerContext, ImageEmbedder imageEmbedder) at Postal.EmailViewRenderer.Render(Email email, String viewName) at Postal.EmailService.CreateMailMessage(Email email) at Postal.EmailService.Send(Email email) at Postal.Email.Send()
我知道这很不寻常,但我该如何解决最后一个错误?
进一步调试更新:
我在 Web 服务上使用企业日志记录,并注意到它直到下一次调用才发送错误电子邮件,所以我的错误电子邮件直到下一次调用 Web 服务才被发送。我在带有 smtp 设置的 web.config 主文件中添加了一个 system.net 部分,这实际上使它变得更糟。 Web 服务处于 运行.
时未发送任何电子邮件
我尝试在 global.asax 文件中为 Web api 实例化一个常规 Web 应用程序实例,但这似乎没有实际效果。
我根据下面的回答向 web.config 文件添加了一些路由,但这也没有效果。 wep api 2 应用程序具有与常规 Web 应用程序相同的引用和其他配置项,但仍然存在问题。
一个解决方案是将 web api 2 重新创建为添加了 web api 2 的常规网站。有很多在线参考资料,Web api 2 应用程序的原始应用程序是一个具有 api 功能的常规网站。
从阅读文献来看,我正在处理的这个对偶性问题可能已经用 .Net Core 解决了,但我不能在我们当前的系统上使用它。
我猜下一个问题是为什么 web api 2 是 运行 时禁用 sendmail。
web api 2 会在 web api 调用期间禁用 sendmail 吗?
我终于把问题解决了。邮政使用的电子邮件文件夹中的 web.config 文件有问题。
通常,当您实例化 Web 应用程序时,web.config 文件包含正确的信息,因此 views 文件夹的 web.config 文件继承必要的类型。
从 Web api 2 应用程序开始时,这些类型未在层次结构中定义,因此不会由视图文件夹自动继承。
Views/Emails 文件夹的 web.config 修改为:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<sectionGroup name="system.web.webPages.razor"
type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="host"
type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
requirePermission="false"/>
<section name="pages"
type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
requirePermission="false"/>
</sectionGroup>
</configSections>
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc"/>
<add namespace="System.Web.Mvc.Html"/>
<add namespace="System.Web.Optimization"/>
<add namespace="Postal" />
</namespaces>
</pages>
</system.web.webPages.razor>
<appSettings>
<add key="webpages:Enabled" value="false"/>
</appSettings>
</configuration>
系统随后路由到视图并按预期处理电子邮件。
上面提到的邮件通过问题是由于邮件发送界面在发送过程中被炸了。那不是真正由 web api 2.
引起的问题
我有一个 web api 2.0 应用程序,我想添加视图处理。
我正在使用 postal.mvc5 并想从应用程序中发送电子邮件。
我已经解决了常规控制器路由问题,现在要解决最后一个错误。
用Postal.Mvc5实现的_ViewStart.cshtml页面是:
@{
Layout = null;
}
我的 web.config 视图文件夹中的页面:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web.webPages.razor>
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc"/>
<add namespace="System.Web.Mvc.Html"/>
<add namespace="System.Web.Optimization"/>
<add namespace="Postal" />
</namespaces>
</pages>
</system.web.webPages.razor>
</configuration>
我得到的错误是:
Type 'ASP._Page_Views_Emails__ViewStart_cshtml' does not inherit from 'System.Web.WebPages.StartPage'.
完整的错误是:
Source: System.Web ----Target Site: CheckAssignableType Timestamp: 10/23/2017 3:05:48 PM Message: Type 'ASP._Page_Views_Emails__ViewStart_cshtml' does not inherit from 'System.Web.WebPages.StartPage'. ----StackTrace: at System.Web.UI.Util.CheckAssignableType(Type baseType, Type type) at System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(VirtualPath virtualPath, Type requiredBaseType, HttpContext context, Boolean allowCrossApp) at System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(String virtualPath, Type requiredBaseType) at System.Web.WebPages.BuildManagerWrapper.CreateInstanceOfType[T](String virtualPath) at System.Web.WebPages.VirtualPathFactoryExtensions.CreateInstance[T](IVirtualPathFactory factory, String virtualPath) at System.Web.WebPages.VirtualPathFactoryManager.CreateInstanceOfType[T](String virtualPath) at System.Web.WebPages.VirtualPathFactoryExtensions.CreateInstance[T](IVirtualPathFactory factory, String virtualPath) at System.Web.WebPages.StartPage.GetStartPage(WebPageRenderingBase page, IVirtualPathFactory virtualPathFactory, String appDomainAppVirtualPath, String fileName, IEnumerable
1 supportedExtensions) at System.Web.WebPages.StartPage.GetStartPage(WebPageRenderingBase page, String fileName, IEnumerable
1 supportedExtensions) at System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance) at System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer) at Postal.EmailViewRenderer.RenderView(IView view, ViewDataDictionary viewData, ControllerContext controllerContext, ImageEmbedder imageEmbedder) at Postal.EmailViewRenderer.Render(Email email, String viewName) at Postal.EmailService.CreateMailMessage(Email email) at Postal.EmailService.Send(Email email) at Postal.Email.Send()
我知道这很不寻常,但我该如何解决最后一个错误?
进一步调试更新:
我在 Web 服务上使用企业日志记录,并注意到它直到下一次调用才发送错误电子邮件,所以我的错误电子邮件直到下一次调用 Web 服务才被发送。我在带有 smtp 设置的 web.config 主文件中添加了一个 system.net 部分,这实际上使它变得更糟。 Web 服务处于 运行.
时未发送任何电子邮件我尝试在 global.asax 文件中为 Web api 实例化一个常规 Web 应用程序实例,但这似乎没有实际效果。
我根据下面的回答向 web.config 文件添加了一些路由,但这也没有效果。 wep api 2 应用程序具有与常规 Web 应用程序相同的引用和其他配置项,但仍然存在问题。
一个解决方案是将 web api 2 重新创建为添加了 web api 2 的常规网站。有很多在线参考资料,Web api 2 应用程序的原始应用程序是一个具有 api 功能的常规网站。
从阅读文献来看,我正在处理的这个对偶性问题可能已经用 .Net Core 解决了,但我不能在我们当前的系统上使用它。
我猜下一个问题是为什么 web api 2 是 运行 时禁用 sendmail。
web api 2 会在 web api 调用期间禁用 sendmail 吗?
我终于把问题解决了。邮政使用的电子邮件文件夹中的 web.config 文件有问题。
通常,当您实例化 Web 应用程序时,web.config 文件包含正确的信息,因此 views 文件夹的 web.config 文件继承必要的类型。
从 Web api 2 应用程序开始时,这些类型未在层次结构中定义,因此不会由视图文件夹自动继承。
Views/Emails 文件夹的 web.config 修改为:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<sectionGroup name="system.web.webPages.razor"
type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="host"
type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
requirePermission="false"/>
<section name="pages"
type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
requirePermission="false"/>
</sectionGroup>
</configSections>
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc"/>
<add namespace="System.Web.Mvc.Html"/>
<add namespace="System.Web.Optimization"/>
<add namespace="Postal" />
</namespaces>
</pages>
</system.web.webPages.razor>
<appSettings>
<add key="webpages:Enabled" value="false"/>
</appSettings>
</configuration>
系统随后路由到视图并按预期处理电子邮件。
上面提到的邮件通过问题是由于邮件发送界面在发送过程中被炸了。那不是真正由 web api 2.
引起的问题