gpt4 book ai didi

c# - ASP MVC 路由中的新手 - 404 错误

转载 作者:太空宇宙 更新时间:2023-11-03 21:03:39 25 4
gpt4 key购买 nike

我是使用 VS2017 设计 API 的新手,我正在尝试让我的简单 API 与数据库中的几个 SQL 对象一起工作。

我有一个相当简单的项目,如下所示:

WebApiConfig.cs:

        public static void Register(HttpConfiguration config)
{
// Web API configuration and services

// Web API routes
//config.MapHttpAttributeRoutes();

config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}

我认为这是库存,所以应该让我去我想去的地方。我有一些基于相同原则的 Controller ,例如:

    public class UsersController : Controller
{
private APIContext db = new APIContext();

// GET: Users
public ActionResult Index()
{
return View(db.Users.ToList());
}

// GET: Users/Details/5
public ActionResult Details(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Users users = db.Users.Find(id);
if (users == null)
{
return HttpNotFound();
}
return View(users);
}
}

还有更多,但所有内容都是自动生成的,所以我认为我不必展示它们。

问题是当我访问 localhost/api/users 时,我得到 404 错误页面:找不到与请求 URI“http://localhost:myport/api/users”相匹配的 HTTP 资源'.

当我尝试使用/api/users/1 访问特定 ID 时,情况相同谁能指出我应该尝试改变的地方?我迷失在配置文件和路由的丛林中!

谢谢!

编辑:在一些好的答案之后,这里有一些更多信息:我想知道问题是否出在其他地方。当我在 localhost/api 上时,我得到一个“漂亮”的错误页面,但是当我尝试访问/api/users/index 时,我得到一个带有 404 消息的 XML 响应。这是另一个问题的征兆吗?需要注意的是,Swagger UI 完全不显示任何内容。

最佳答案

您的路由配置在模板中仅提到了一个Controller,而没有关联一个默认的Action

您有多种选择,但是,我建议您选择一个简单的选项,例如:

public static void Register(HttpConfiguration config)
{
// Web API configuration and services

// Web API routes
//config.MapHttpAttributeRoutes();

config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { action = "index", id = RouteParameter.Optional }
);
}

现在 Action 是模板的一部分,默认值为 index,您将拥有以下内容:

http://localhost:myport/api/users 重定向到 UsersController.Index
<强> http://localhost:myport/api/users/index 重定向到 UsersController.Index
<强> http://localhost:myport/api/users/details 重定向到 UsersController.Details
<强> http://localhost:myport/api/users/details/123 重定向到 UsersController.Details

编辑 经过第二次调查,您似乎使用的是 MVC Controller 而不是 WebApi Controller 。虽然它们具有相同的名称,但它们属于不同的命名空间并且需要它们自己的配置。

为了配置您的 MVC Controller 路由,请确保在您的 App_Start 文件夹中有如下类:

public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { action = "Index", id = UrlParameter.Optional }
);
}
}

然后,从 Global.asax 中,在 Application_Start 方法中,确保进行以下调用:

RouteConfig.RegisterRoutes(RouteTable.Routes);

如:

protected void Application_Start()
{
RouteConfig.RegisterRoutes(RouteTable.Routes);
GlobalConfiguration.Configure(WebApiConfig.Register);
}

从现在开始,您现在可以通过 http://localhost:myport/users 访问您的 Controller .

另一方面,如果你想做一个返回数据而不是 View 的 API,你需要你的 Controller 继承自 ApiController

关于c# - ASP MVC 路由中的新手 - 404 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42788249/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com