我已经在Visual Studio 2017中创建了一个MVC项目,我为正常工作的网页添加了一些控制器,
现在,我想在同一项目中创建Web API,为此,我在 App_Start 文件夹中为 WEB API配置
这是代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http.Headers;
using System.Web;
using System.Web.Http;
namespace TestApp.App_Start
{
public 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 }
);
}
}
}
,并且在已经创建了网页控制器的controllers文件夹中
我添加了具有默认读写操作的Web Api控制器名称ValController
在这里
namespace TestApp
{
public class ValController : ApiController
{
// GET api/<controller>
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
// GET api/<controller>/5
public string Get(int id)
{
return "value";
}
}
}
但是当我运行它时
我尝试在此url: localhost:44364/Val/Get
或
上访问此文件
localhost:44364/api/Val/Get
“ /”应用程序中的服务器错误。 找不到资源。
将提供任何帮助
答案 0 :(得分:1)
我认为问题在于api控制器文件结构。 MVC基本上是通过“ Convention over configuration”工作的,MVC路由器可能无法识别App_Data中添加的api。您能否在App_Data外部创建名为“ Api”的新文件夹,作为项目的直接子文件夹,然后将api代码移动到该文件夹?
此外,根据给定的路由配置,您可以检查以下网址。
* localhost:<port>/api/Val
* localhost:<port>/api/Val/5
也正如@David所说,将{action}部分包含在路由网址中
routeTemplate: "api/{controller}/{action}/{id}"
答案 1 :(得分:1)
一切都好起来
只是一件事
检查是否已将其添加到function DogA(){
this.name = 'a'
return {
name: 'b',
bark: () => {
console.log(this.name)
}
}
}
const dogA = new DogA()
dogA.bark() // a
文件中
Global.asax.cs
答案 2 :(得分:0)
您设置的路由是控制器/参数,您需要将其设置为控制器/ ACTION /参数。
routeTemplate: "api/{controller}/{action}/{id}",