Невозможно выполнить простой GET-запрос к Nancy самостоятельно: RuntimeBinderException и ViewNotFoundException
Мой код:
public class MyWebService : IDisposable
{
private readonly NancyHost _host;
public MyWebService(int port = 7017)
{
var uri = new Uri(string.Format("http://localhost:{0}", port));
_host = new NancyHost(uri);
_host.Start();
}
public void Dispose()
{
if (_host != null)
{
_host.Stop();
_host.Dispose();
}
}
}
internal class MyWebModule : NancyModule
{
public MyWebModule()
{
Get["/"] = _ => "Received GET request";
}
}
При выполнении следующего HTTP-запроса: GET http://localhost:7017/
используя REST-клиент Insomnia, я получаю следующие загадочные исключения:
Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: 'Cannot convert type 'Nancy.ErrorHandling.DefaultStatusCodeHandler.DefaultStatusCodeHandlerResult' to 'Nancy.Response''
at CallSite.Target(Closure , CallSite , Object )
С источником: Anonymously Hosted DynamicMethods Assembly
сопровождается
Nancy.ViewEngines.ViewNotFoundException
at Nancy.ViewEngines.DefaultViewFactory.GetRenderedView(String viewName, Object model, ViewLocationContext viewLocationContext)
без какой-либо дополнительной информации об исключении.
Затем клиент REST показывает ошибку 404
,
Что я определил неправильно? Я следовал следующему примеру: построение простого http-сервера-с-нэнси
1 ответ
Если вы запускаете свой код в отладчике - убедитесь, что выброшенное исключение фактически не обработано. Код может выдавать исключения, и ваш отладчик (если он настроен на это) может их сломать, даже если эти исключения обрабатываются (некоторыми catch
блок). Поскольку вы получаете 404 ответа в конце концов, а не сбой - я предполагаю, что эти исключения являются частью "нормального" потока Нэнси и поэтому обрабатываются.
Что касается 404 - ваш модуль является внутренним, и Нэнси не обнаружит его. Сделайте это общедоступным:
public class MyWebModule : NancyModule
{
public MyWebModule()
{
Get["/"] = _ => "Received GET request";
}
}