Pergunta

Meu site NancyFX, que emprega visualizações de navalha cshtml, asp.net e IIS7, funciona perfeitamente localmente.Ele funciona por meio do VS12 integrado ao 'ASP.NET Development Server' e também como um site independente por meio de minha cópia local do IIS7.Garanti que meu web.config contenha as seções corretas da navalha.

Se eu implantar este site em um servidor remoto (testado em meus servidores temporários e ativos), cada URI retornará o erro:

406 - Client browser does not accept the MIME type of the requested page.

Eu verifiquei o Accept cabeçalhos na solicitação.Aqui estão eles:

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-GB,en-US;q=0.8,en;q=0.6

Outros sites não-nancy executados em servidores remotos funcionam bem, eles têm exatamente os mesmos cabeçalhos de aceitação.Este site costumava funcionar bem nos servidores remotos com os mesmos cabeçalhos Accept, até onde eu sei.

Também fiz o seguinte teste em meu servidor temporário.

Eu renomeei meu HomeView.cshtml para HomeView.html e substituiu todo o seu conteúdo por hello world (sem tags html, apenas o texto).Isto foi servido sem problemas.Em seguida, renomeei somente texto HomeView.html de volta a HomeView.cshtml e peguei o 406 novamente.

Finalmente, e em desespero, adicionei um tipo MIME ao servidor que mapeia .cshtml -> text/html mas é claro que não fez diferença, já que na verdade não estou servindo .cshtml arquivos.

Por que Nancy (ou talvez IIS7) está retornando um 406 Not Acceptable resposta para qualquer conteúdo derivado de .cshtml arquivos?

EditarAqui está o rastro de Nancy.Parece mostrar que ou o HomeView.cshtml não pode ser encontrado ou que o mecanismo Razor View não está sendo usado, então qualquer Os arquivos *.cshtml não serão encontrados.

Currently available view engine extensions: sshtml,html,htm

Isso leva à exceção interna de Nancy:

Nancy.ViewEngines.ViewNotFoundException

No entanto, precisamente os mesmos arquivos do site são executados localmente e invocam o mecanismo Razor View corretamente e, portanto, encontram HomeView.cshtml.

Ainda estou perplexo.

_Nancy Rastreamento

[StaticContentConventionBuilder] The requested resource '/home' does not match convention mapped to '/Content'
[DefaultRouteResolver] Found exact match route
[DefaultRouteInvoker] Processing as negotiation
[DefaultRouteInvoker] Accept header: text/html;q=1, application/xhtml+xml;q=1, application/xml;q=0.9, */*;q=0.8
[DefaultRouteInvoker] Acceptable media ranges: text/html
[DefaultRouteInvoker] Invoking processor: Nancy.Responses.Negotiation.ViewProcessor
[DefaultViewFactory] Rendering view with name HomeView
[DefaultViewResolver] Resolving view for 'HomeView', using view location conventions.
[DefaultViewResolver] Attempting to locate view using convention 'views/Home/HomeView'
[DefaultViewResolver] Attempting to locate view using convention 'Home/HomeView'
[DefaultViewResolver] Attempting to locate view using convention 'views/HomeView'
[DefaultViewResolver] Attempting to locate view using convention 'HomeView'
[DefaultViewResolver] No view could be resolved using the available view location conventions.
[DefaultViewFactory] Unable to find view engine that could render the view.
[DefaultRouteInvoker] Processor threw Nancy.ViewEngines.ViewNotFoundException exception: Unable to locate view 'HomeView'
Currently available view engine extensions: sshtml,html,htm
Locations inspected: ,views/Home/HomeView,,Home/HomeView,views/HomeView,HomeView
Root path: D:\wwwroot\GoodPractice.uMentor\[DefaultRouteInvoker] Invoking processor: Nancy.Responses.Negotiation.ViewProcessor
[DefaultViewFactory] Rendering view with name HomeView
[DefaultViewResolver] Resolving view for 'HomeView', using view location conventions.
[DefaultViewResolver] Attempting to locate view using convention 'views/Home/HomeView'
[DefaultViewResolver] Attempting to locate view using convention 'Home/HomeView'
[DefaultViewResolver] Attempting to locate view using convention 'views/HomeView'
[DefaultViewResolver] Attempting to locate view using convention 'HomeView'
[DefaultViewResolver] No view could be resolved using the available view location conventions.
[DefaultViewFactory] Unable to find view engine that could render the view.
[DefaultRouteInvoker] Processor threw Nancy.ViewEngines.ViewNotFoundException exception: Unable to locate view 'HomeView'
Currently available view engine extensions: sshtml,html,htm
Locations inspected: ,views/Home/HomeView,,Home/HomeView,views/HomeView,HomeView
Root path: D:\wwwroot\GoodPractice.uMentor\[DefaultRouteInvoker] Unable to negotiate response - no processors returned valid response
Foi útil?

Solução

A resposta foi simples.Eu só precisava

  • desinstalar o pacote Nancy.Viewengines.Razor (NuGet)
  • instale o pacote Nancy.Viewengines.Razor (NuGet)
  • Limpe o projeto
  • Recompilar
  • Reimplantar

Voilá!Eu deveria ter feito isso há 16 horas, eu acho.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top