我正在尝试使用web api向我的mvc项目添加Web服务。 项目创建后,我选择了Mvc + Web Api。
但是,我无法访问api控制器,我不断收到此错误:
<Error>
<Message>
No HTTP resource was found that matches the request URI 'http://www.myapp.app/api/sms'.
</Message>
<MessageDetail>
No type was found that matches the controller named 'sms'.
</MessageDetail>
</Error>
我的global.asax
:
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
BundleMobileConfig.RegisterBundles(BundleTable.Bundles);
我的RouteConfig.cs
:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
我的WebApiConfig.cs
:
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
我的Api控制器:
public class SmsController : ApiController
{
private DbContext db = new DbContext();
// GET: api/Sms
public IQueryable<Sms> GetSms()
{
return db.Sms;
}
...
}
当然,我正试图通过http://www.myapp.app/api/sms
访问api。
我真的尝试了我能想到的一切,并在SO和其他论坛上阅读了所有相关问题,但没有任何帮助。
我很确定它与我的应用程序网址有关,这不是常规localhost:port
,我将其更改为www.myapp.app
并且它在端口80上运行。
为此,我必须将IIS绑定更改为*:80:www.myapp.app
,并将此条目添加到drivers/etc/hosts
文件中:127.0.0.1 www.myapp.app
。
此时我很确定这是造成我问题的原因。
有什么想法吗?
Application Insights表示我的请求显然已正确映射:
此外,它还显示以下请求已映射到此控制器和操作:
获取短信
获取短信/ GetSms
获取短信/获取信息
获取短信/索引
获取短信
GET / api / sms
答案 0 :(得分:0)
使用属性路由
public class SmsController : ApiController
{
private DbContext db = new DbContext();
// GET: api/Sms
[HttpGet]
[Route("api/sms")]
public IQueryable<Sms> GetSms()
{
return db.Sms;
}
...
}
如果端口号为80
,则无需添加,但如果与80
不同,则为url
http://www.myapp.app:portnumber/api/sms