【发布时间】:2021-08-13 00:10:03
【问题描述】:
我们一直在开发一个 .NET MVC 应用程序,最近正在寻求为电子邮件服务集成一个 webhook。我承认,这是我第一次尝试 webhooks 和 Web API,但它看起来相当简单。我遵循了来自 SendGrid 的几个最佳实践和代码示例,并不断收到“未找到与名为 'xxxxxx' 的控制器匹配的类型”消息。我正在使用 Postman 在本地进行测试,但无法找到控制器。我最初的目标是使用最基本的配置进行测试,然后将 POST 传递给我们的 Web 应用程序,解析数据并返回“ok”。
我已经在 WebApiConfig.cs 中启用了属性路由,测试了多个不同的控制器配置,添加了“GlobalConfiguration.Configure(WebApiConfig.Register);”到我的 Global.asax.cs 文件,并确保我的课程是公开的。
我错过了什么吗?我已经在几天内对这个问题进行了几个小时的故障排除,但一直无法解决。
在我的邮递员请求中,我没有发送任何参数,将内容类型标头设置为 jason,并且仅在正文中包含一个示例 SendGrid 事件。我已经验证了端口号,并且没有通过 http 将任何身份验证传递给我们的本地应用程序。 POST 请求被发送到以下网址:http://localhost:59998/api/sample
我已经关注了几篇关于类似问题的堆栈溢出帖子,并确保我没有自责(私人课程、复数与单数、api 配置设置)。
我的 api 配置:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
我删除了大部分操作方法来简化控制器的代码。我现在要做的就是接受 POST,在本地调试,然后返回 ok。我已经尝试了多种不同的类类型,并回溯到最简单的选项。
我在控制器中设置了断点,并且一直在使用多个测试变量进行故障排除,我已将其删除以清理代码(例如:int test = 0)。
namespace StickerAppWeb.Controllers
{
public class SampleController : ApiController
{
[HttpPost]
public string Index()
{
return "API method";
}
public void Post()
{
//int test = 0; //breakpoint here
}
}
}
我的全局配置:
namespace StickerAppWeb
{
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
GlobalConfiguration.Configure(WebApiConfig.Register);
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
}
}
更新1: 作为昨天的后续行动,我也将这个项目发布到 Azure,并在向 Azure 中的应用程序提交 POST 时从 Postman 得到相同的响应。是否有任何原因导致应用程序在本地和 Azure 中都找不到该控制器?
【问题讨论】:
-
也许我完全错了,但您的路线模板缺少操作。这很可疑,因为它(可能)意味着采取了默认操作(索引)。但是您的默认操作是 POST 而不是 GET。我建议回到基础——放弃你的自定义路线,使用 GET 索引并测试它。如果它可以工作,那确实是问题,如果没有,你的代码还有另一个问题。
标签: c# .net controller webapi