Nginx FastCGI Mono WebAPI 2 выдает исключение ArgumentNullException: значение не может быть нулевым. Имя параметра: путь

#asp.net-mvc #asp.net-mvc-4 #nginx #asp.net-web-api #mono

#asp.net-mvc #asp.net-mvc-4 #nginx #asp.net-web-api #mono

Вопрос:

Моя настройка: клиент (http:8080 ) Nginx (FastCGI: 9000) fastcgi-моно-сервер

Я хочу разместить ASP.NET Приложение MVC 4, полностью построенное с контроллерами WebAPI 2, конфигурацией и т. Д., На Ubuntu с Mono 4 и fastcgi-mono-server4 , Но для маршрутов WebAPI оно возвращает 400 :

 System.ArgumentNullException
Value cannot be null.
Parameter name: path

Description: HTTP 400.Error processing request.
Details: Non-web exception. Exception origin (name of application or object): mscorlib.
Exception stack trace:
  at System.IO.DirectoryInfo.CheckPath (System.String path) [0x00006] in <dca3b561b8ad4f9fb10141d81b39ff45>:0 
  at System.IO.DirectoryInfo..ctor (System.String path, System.Boolean simpleOriginalPath) [0x00006] in <dca3b561b8ad4f9fb10141d81b39ff45>:0 
  at System.IO.DirectoryInfo..ctor (System.String path) [0x00000] in <dca3b561b8ad4f9fb10141d81b39ff45>:0 
  at (wrapper remoting-invoke-with-check) System.IO.DirectoryInfo:.ctor (string)
  at Mono.WebServer.FastCgi.WorkerRequest.GetFilePath () [0x00035] in <a872d12009ac4a668f0d504d764f1c44>:0 
  at Mono.WebServer.MonoWorkerRequest.GetFilePathTranslated () [0x00001] in <5b4128956e344d60b82a5fd7012fd8a1>:0 
  at Mono.WebServer.MonoWorkerRequest.AssertFileAccessible () [0x00010] in <5b4128956e344d60b82a5fd7012fd8a1>:0 
  at Mono.WebServer.MonoWorkerRequest.ProcessRequest () [0x0000b] in <5b4128956e344d60b82a5fd7012fd8a1>:0 
  

На моей машине разработки нормально работает как с помощью xsp4 , так и с помощью кнопки MonoDevelop «выполнить». Не пробовал fastcgi-mono-server4 , но если вы считаете, что это актуально, я это сделаю.

Как я уже сказал выше, поведение происходит только для URL-адресов, соответствующих маршрутам WebAPI, например /api/products , что означает, что конфигурация работает, и я полагаю, это как-то связано со средой.

Я начал fastcgi-mono-server следующим образом: MONO_OPTIONS=--trace=E:System.Exception fastcgi-mono-server4 /appconfigdir=/etc/mono/fastcgi /socket=tcp:127.0.0.1:9000 и при нажатии на URL-адреса WebAPI он выводит следующее:

 [0x7f8276459700:] EXCEPTION handling: System.ArgumentNullException: Value cannot be null.
Parameter name: path
  

Мой код не выполняет никакого ввода-вывода, только базу данных (но мы еще не совсем там). Как я уже сказал выше, поведение происходит только для URL-адресов, соответствующих маршрутам WebAPI, например /api/products , что означает, что конфигурация работает, и я полагаю, это как-то связано со средой.

Ответ №1:

Это происходит из-за отсутствия требуемого параметра.

Я столкнулся с этим сегодня. Я обнаружил, что в /etc/nginx/fastcgi_params мне нужно добавить следующую строку:

 fastcgi_param  PATH_INFO          "";
  

И в конфигурации сервера мне нужно было импортировать этот файл:

 server {
    listen 80;
    ...
    location / {
        ...
        fastcgi_pass 127.0.0.1:9000;
        include /etc/nginx/fastcgi_params;
    }
}
  

Конечно, вам может не хватать другого параметра.

Комментарии:

1. Спасибо. Мне также пришлось добавить: fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name;