У меня есть приложение web API 2.0, в которое я хочу добавить обработку представлений.
Я использую postal.mvc5 и хочу отправить электронное письмо из приложения.
Я решил обычную маршрутизацию контроллера, и теперь мне нужно решить последнюю ошибку.
Страница _ViewStart.cshtml, реализованная с помощью Postal.Mvc5:
@{
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>
Ошибка, которую я получаю:
Тип «ASP._Page_Views_Emails__ViewStart_cshtml» не наследуется от «System.Web.WebPages.StartPage».
Полная ошибка:
Источник: System.Web ---- Целевой сайт: CheckAssignableType Отметка времени: 23.10.2017 15:05:48 Сообщение: Тип «ASP._Page_Views_Emails__ViewStart_cshtml» не наследуется от «System.Web.WebPages.StartPage». ----StackTrace: в System.Web.UI.Util.CheckAssignableType(тип baseType, тип типа) в System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(VirtualPath virtualPath, тип requiredBaseType, контекст HttpContext, логическое значение allowCrossApp) в System.Web .Compilation.BuildManager.CreateInstanceFromVirtualPath(String virtualPath, Type requiredBaseType) в System.Web.WebPages.BuildManagerWrapper.CreateInstanceOfType[T](String virtualPath) в System.Web.WebPages.VirtualPathFactoryExtensions.CreateInstance[T](фабрика IVirtualPathFactory, String virtualPath) в System.Web.WebPages.VirtualPathFactoryManager.CreateInstanceOfType[T](String virtualPath) в System.Web.WebPages.VirtualPathFactoryExtensions.CreateInstance[T](фабрика IVirtualPathFactory, String virtualPath) в System.Web.WebPages.StartPage.GetStartPage(страница WebPageRenderingBase , IVirtualPathFactory virtualPathFactory, String appDomainAppVirtualPath, String fileName, IEnumerable
1 supportedExtensions) at System.Web.WebPages.StartPage.GetStartPage(WebPageRenderingBase page, String fileName, IEnumerable
1supportExtensions) в System.Web.Mvc.RazorVie w.RenderView (ViewContext viewContext, средство записи TextWriter, экземпляр объекта) в System.Web.Mvc.BuildManagerCompiledView.Render (ViewContext viewContext, средство записи TextWriter) в Postal.EmailViewRenderer.RenderView (представление IView, ViewDataDictionary viewData, ControllerContext controllerContext, ImageEmbedder imageEmbedder) в Postal.EmailViewRenderer.Render(электронная почта, String viewName) в Postal.EmailService.CreateMailMessage(электронная почта) в Postal.EmailService.Send(электронная почта) в Postal.Email.Send()
Я знаю, что это довольно необычно, но как мне обойти эту последнюю ошибку?
Обновление по дальнейшей отладке:
Я использую Enterprise Logging в веб-службе и заметил, что она не отправляла электронные письма об ошибках до следующего вызова, поэтому мои электронные письма об ошибках не отправлялись до следующего вызова веб-службы. Я добавил раздел system.net в основной файл web.config с настройкой smtp, и это на самом деле сделало его еще хуже. Во время работы веб-службы электронные письма не отправлялись.
Я попытался создать экземпляр обычного веб-приложения в файле global.asax для веб-API, но, похоже, это не дало реального эффекта.
Я добавил некоторую маршрутизацию в файл web.config в соответствии с приведенным ниже ответом, но это также не имеет никакого эффекта. Приложение wep api 2 имеет те же ссылки и другие элементы конфигурации, что и обычное веб-приложение, но все еще имеет проблему.
Одним из решений было бы воссоздание веб-API 2 как обычного веб-сайта с добавлением веб-API 2. На это есть много ссылок в Интернете, и исходное приложение, из которого было создано приложение web API 2, было обычным веб-сайтом с возможностями API.
Судя по литературе, эта проблема двойственности, с которой я имею дело, вероятно, решается с помощью .Net Core, но я не могу использовать ее в нашей текущей системе.
Я предполагаю, что следующий вопрос заключается в том, почему sendmail отключен во время работы веб-API 2.
Что насчет веб-API 2, который отключит sendmail во время вызова веб-API?