无法在新的WebApi项目中点击任何属性路由 - 仅返回404

时间:2018-03-29 11:35:39

标签: c# asp.net-web-api asp.net-web-api2 global-asax attributerouting

我正在从头开始构建一个新的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

其他一些要点:

  • 此WebApi项目正在替换已从解决方案中排除的旧版本。路线相同
  • 该项目作为IIS中的应用程序托管。我使用与旧API相同的应用程序,但应用程序的设置(在IIS中)指向新项目的本地文件夹

我错过了什么?

1 个答案:

答案 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