_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, IEnumerable1 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.

引起的问题