VS 2017,New,Project,C#,ASP.NET Web应用程序,ASP.NET 4.5.2空模板。
未经检查的文件夹和Webforms,MVC和WebAPI的参考。后来通过Nuget添加了MS WebApi v5.4.2。
手动添加“Controllers”文件夹。
xController.cs:
namespace v1.MyApiCallTheirApi.api
{
public class xController : ApiController
{
// GET api/<controller>
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
}
}
的index.html:
<body>
<input type="button" value="Go" onclick="go()"/>
<script type="text/javascript">
function go()
{
alert("lafdla");
$.ajax({
type: "GET",
url: "/api/x",
success: alert("ok")
});
}
</script>
</body>
$ .ajax call总是返回404.已经检查this,that和其他许多人。到目前为止,我唯一的疑问是它可能需要一个Global.asax来进行路由配置,但我想在添加API后它应该为我自动添加一些隐藏的路由。
答案 0 :(得分:1)
目前您的应用程序并不知道如何创建路由。除非你提供关于每种代码所在位置的指针,否则MVC无法自动知道。
因此有两种方法(使用GlobalConfiguration实例): -
a)基于公约,使用地图路线方法。没有其他地方需要进一步改变。
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
b)使用控制器方法的属性来定义实际路线。然后在每个操作方法
上添加route属性 config.MapHttpAttributeRoutes();
过度行动
[Route('api/myentity/get')
public entity GetEntity() { }
至于添加软件包,它只为您提供WebAPI所需的相关dll,不会进行任何更改
答案 1 :(得分:0)
您还可以通过操作属性[HttpGet("")]
定义控制器的默认操作。
您需要更新您的操作:
// GET api/<controller>
[HttpGet("")]
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
答案 2 :(得分:0)
总结问题的原因和解决方案:
public class v1Controller : ApiController
,只有public class v1 : ApiController
不会工作Global.asax是可选的,但它类似于项目的_init(),所以这是必须的,因为API需要路由。无论这个Api是由项目内部还是项目外调用,只要它触及内置的App_Start init项目的所有内容。
public class Global : System.Web.HttpApplication
{
protected void Application_Start(object sender, EventArgs e)
{
GlobalConfiguration.Configure(WebApiConfig.Register);
}
}
API路由注册通常在App_Start中定义,类名为WebApiConfig
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Either this Attribute Routing
config.MapHttpAttributeRoutes();
// Or this conventional Routing, but not together.
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
MS WebApi是基于MVC路由开发的,如果需要MVC则会很困惑,这里是一个很好的reading。答案是否,你不需要MVC来做WebApi。从Nuget添加新包不会自动配置/添加必要的项目 投射。