我正在从头开始构建一个新的Web API项目,除了404(Not Found)之外我无法获得任何响应。
每个控制器和方法的路由都在属性中声明。
这是我的Global.asax Application_Start
方法。
protected void Application_Start()
{
log4net.Config.XmlConfigurator.Configure();
Log.Info("Application_Start...");
GlobalConfiguration.Configure(IoCConfig.Register);
Collaboral.Common.DB.DatabaseUtil.SetRetryStratPol();
GlobalConfiguration.Configuration.EnsureInitialized();
}
该代码调用方法IoCConfig.Register
。
public static void Register(HttpConfiguration config)
{
config.DependencyResolver = new TinyIocWebApiDependencyResolver(RegisterDependencies());
config.EnableCors(new EnableCorsAttribute(origins: "*", headers: "*", methods: "*"));
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
foreach (var route in config.Routes)
{
Log.Info($"{nameof(Register)}: Route = \"{route.RouteTemplate}\"");
}
}
可以看出,我正在config.Routes
集合中记录路由,我可以从日志文件中看到这个集合只包含我手动映射的默认路由。
WebApiApplication | - Application_Start ... |
IoCConfig | - 注册:Route =“”|
IoCConfig | - 注册:Route =“api / {controller} / {id}”|
以下是我如何使用路由属性的示例。
namespace MyApi.Controllers
{
[BasicHttpAuthorize(RequireAuthentication = true)]
[RoutePrefix("v1/projects")]
public class ProjectsController : ApiController
{
[Route("{projectId:guid}/assocs")]
[HttpGet]
[Authorize(Roles = // ...)]
public IHttpActionResult GetAssociations(Guid projectId)
{
// ...
}
我正在尝试的网址是
http://localhost/myapi/v1/projects/bbe89597-28ae-40d5-8071-56dfb222f97b/assocs
其他一些要点:
我错过了什么?
答案 0 :(得分:0)
为什么你正在使用' myapi'在你的端点?你的端点应该像
http://localhost/v1/projects/bbe89597-28ae-40d5-8071-56dfb222f97b/assocs
您可以参考此链接以获取更多信息。 https://docs.microsoft.com/en-us/aspnet/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2