gpt4 book ai didi

c# - ASP.NET WebApi 不工作。所有路由返回404

转载 作者:行者123 更新时间:2023-11-30 12:26:04 26 4
gpt4 key购买 nike

我有一个 asp.net web api,使用 Unity 作为我的依赖项解析器,使用 OWIN 进行 OAuth 身份验证。

我使用 Visual Studio“添加新项”菜单创建一个 Startup.cs,选择 OWIN Startup 类:

[assembly: OwinStartup(typeof(MyNameSpace.Startup))]
namespace MyNameSpace
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
var config = new HttpConfiguration();
WebApiConfig.Register(config);
config.DependencyResolver = new UnityHierarchicalDependencyResolver(UnityConfig.GetConfiguredContainer());
app.UseWebApi(config);
}
}
}

我的 WebApiConfig.cs 看起来像这样:

public static void Register(HttpConfiguration config)
{
// Web API configuration and services
config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));

// Web API routes
config.MapHttpAttributeRoutes();

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

现在,当我启动应用程序时,我收到默认 url 的 Forbidden 响应,即 http://localhost:port/。 Web api 位于 http://localhost:port/api/。当我请求此 url 或应用程序中的任何 Controller 时,它会以未找到 进行响应。

此外,当我在 Startup 类的 Configuration 方法中放置断点时;一旦我启动应用程序,它就会显示以下内容(我不知道它是否相关):

message

我不知道哪里出了问题。它昨晚成功了,我是唯一一个一直在从事这个项目的人。我所做的唯一一件事是添加来自 NuGetOData 引用,但在确定 api 无法正常工作后,我再次删除了这些引用。

编辑:

我应该补充一点,我在应用程序中设置的任何断点当前在我将鼠标悬停在它上面时都会显示相同的消息,所以也许它毕竟是相关的。

编辑 2:

这是 EmployeeController.cs 的摘录:

[Authorize]
public class EmployeeController : ApiController
{
private readonly IEmployeeService _service;

public EmployeeController(IEmployeeService employeeService)
{
_service = employeeService;
}

[HttpGet]
[ResponseType(typeof(Employee))]
public IHttpActionResult GetEmployee(string employeeId)
{
var result = _service.GetEmployees().FirstOrDefault(x => x.Id.Equals(employeeId));
if (result != null)
{
return Ok(result);
}
return NotFound();
}

[HttpGet]
[ResponseType(typeof (IQueryable<Employee>))]
public IHttpActionResult GetEmployees()
{
return Ok(_service.GetEmployees());
}
...

编辑 3

按照建议重新启动 Visual Studio 后,我可以确认断点警告仍然存在并显示在整个应用程序中:

breakpoint in controller

编辑 4

删除 OWIN 引用和 Startup.cs,应用程序现在恢复了生机。我能够再次放置断点并进行 api 调用。怎么回事?

最佳答案

WebAPI 操作方法基于 HTTP 动词。

如果您想命名除 HTTP Verb 之外的操作方法,您需要查看 Attribute Routing .

在您的示例中,您使用的是简单的 HTTP 动词。如果是这样,您只需要获取

public class EmployeeController : ApiController
{
// GET api/employee
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}

// GET api/employee/5
public string Get(int id)
{
return "value";
}
}

关于c# - ASP.NET WebApi 不工作。所有路由返回404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30060040/

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