Я понимаю, что говорит об этой ошибке и типичная причина, но в этом случае я не уверен, почему она выбрасывается.
Вот полное сообщение об ошибке:
System.ArgumentException: словарь параметров содержит нуль
запись для параметра 'Id' необнуляемого типа 'System.Int32' для
метод 'System.Threading.Tasks.Task`1 [System.String]
AppUninstalled (Int32) 'в
'Storefront.Controllers.ShopifyWebhooksController. Необязательный
Параметр должен быть ссылочным типом, обнуляемым типом или быть объявлен как
необязательный параметр. Имя параметра: параметры
URL, вызываемый для моего приложения: /storefront/wh/AppUninstalled/88564
. Таким образом, он передает идентификатор как int.
Вот определение маршрута:
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Storefront_default",
"Storefront/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
}
Вот подпись действия, которая вызывается: public async Task<string> AppUninstalled(int id)
Теперь, когда я проверяю это локально или на своем промежуточном сервере с помощью Postman, я не получаю эту ошибку. Но когда Shopify звонит, я получаю ошибку. И я могу проверить с помощью сгенерированной ошибки Elmah, что URL, который был вызван, такой же, как я опубликовал выше, с конечным значением Id.
ОБНОВЛЕНИЕ: 1
Я также пытался сделать так, чтобы shopify вызывал URL с явно заданным идентификатором: /storefront/wh/AppUninstalled?id=88564
, но получал ту же ошибку.
Может ли быть что-то в кодировке, что MVC не может преобразовать id в int?
ОБНОВЛЕНИЕ 2
Это работает, но не объясняет, почему вышеприведенное не сработало.
Изменение метода действия в MVC на: public async Task<string> AppUninstalled(string strId)
Изменение URL обратного вызова Shopify на: /storefront/wh/AppUninstalled?strId=88564