我有一个web api 2.0应用程序,我想添加视图处理。
我正在使用postal.mvc5并希望从应用程序中发送电子邮件。
我已经解决了常规控制器路由问题,现在我要解决最终错误。
使用Postal.Mvc5实现的_ViewStart.cshtml页面是:
@{
Layout = null;
}
views文件夹中的我的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>
我得到的错误是:
类型'ASP._Page_Views_Emails__ViewStart_cshtml'不会继承自 'System.Web.WebPages.StartPage'。
完整的错误是:
来源:System.Web ----目标网站:CheckAssignableType时间戳:10/23/2017 3:05:48 PM消息:类型'ASP._Page_Views_Emails__ViewStart_cshtml'不继承自'System.Web.WebPages.StartPage' 。 ---- StackTrace:System.Web上的System.Web.UI.Util.CheckAssignableType(Type baseType,Type type),System.Web的System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(VirtualPath virtualPath,Type requiredBaseType,HttpContext context,Boolean allowCrossApp) System.Web.WebPages.VirtualPathFactoryExtensions.CreateInstance [T](IVirtualPathFactory factory,String virtualPath)上System.Web.WebPages.BuildManagerWrapper.CreateInstanceOfType [T](String virtualPath)的.Compilation.BuildManager.CreateInstanceFromVirtualPath(String virtualPath,Type requiredBaseType)位于System.Web.WebPages.StartPage.GetStartPage(WebPageRenderingBase页面)System.Web.WebPages.VirtualPathFactoryExtensions.CreateInstance [T](IVirtualPathFactory factory,String virtualPath)的System.Web.WebPages.VirtualPathFactoryManager.CreateInstanceOfType [T](String virtualPath)处。 System.Web.Mvc.RazorV上的,IVirtualPathFactory virtualPathFactory,String appDomainAppVirtualPath,String fileName,IEnumerable
1 supportedExtensions) at System.Web.WebPages.StartPage.GetStartPage(WebPageRenderingBase page, String fileName, IEnumerable
1 supportedExtensions)在Postal.EmailViewRenderer.RenderView(IView视图,ViewDataDictionary viewData,ControllerContext controllerContext,ImageEmbedder imageEmbedder)的System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext,TextWriter writer)上的iew.RenderView(ViewContext viewContext,TextWriter writer,Object实例)at at Postal.Email.Send上的Postal.EmailViewRenderer.Render(电子邮件电子邮件,字符串viewName)位于Postal.Email.Send()的Postal.EmailService.Send(电子邮件)中的Postal.EmailService.CreateMailMessage(电子邮件电子邮件)
我知道这非常传统,但我如何解决这最后一个错误呢?
进一步调试的更新:
我在网络服务上使用Enterprise Logging,并注意到它在下次调用之前没有发送错误电子邮件,所以我的错误电子邮件直到下次调用Web服务才被发送。我使用smtp设置将一个system.net部分添加到主web.config文件中,这实际上使它变得更糟。在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会在网络API呼叫期间禁用sendmail吗?
答案 0 :(得分:0)
我终于解决了问题。这是邮政使用的电子邮件文件夹中的web.config文件的问题。
通常,web.config文件在实例化Web应用程序时包含正确的信息,因此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引起的问题。