_viewStart.cshtml не наследует System.Web.WebPages.StartPage в приложении веб-API 2.0.

У меня есть приложение 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, IEnumerable1 supportedExtensions) at System.Web.WebPages.StartPage.GetStartPage(WebPageRenderingBase page, String fileName, IEnumerable1supportExtensions) в 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?


person Timothy Dooling    schedule 23.10.2017    source источник


Ответы (1)


Наконец-то я решил проблему. Это была проблема с файлом web.config в папке электронной почты, используемой Postal.

Обычно файлы web.config содержат правильную информацию при создании экземпляра веб-приложения, поэтому файл web.config для папки представлений наследует необходимые типы.

При запуске приложения веб-API 2 эти типы не определяются в иерархии и, следовательно, не наследуются папкой представления автоматически.

Web.config для папки Views/Emails был изменен следующим образом:

<?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>

Затем система перешла к представлению и обработала электронное письмо, как и ожидалось.

Проблемы с прохождением электронных писем, как указано выше, были вызваны взрывом интерфейса отправки электронной почты в середине отправки. На самом деле это не проблема, вызванная веб-API 2.

person Timothy Dooling    schedule 25.10.2017