【问题标题】:Routes not working on asp.net api project路由不适用于 asp.net api 项目
【发布时间】:2021-03-01 10:00:39
【问题描述】:

我有一个像这样的简单控制器:

using System.Web.Http;
using System.Configuration;

namespace LuloWebApi.Controllers
{
    [Authorize]
    [RoutePrefix("api/Version")]
    public class VersionController : ApiController
    {
        /// <summary>
        /// Gets the latest build version deployed
        /// </summary>
        /// <returns>string</returns>
        [HttpGet]
        public string Get()
        {
            return ConfigurationManager.AppSettings["buildversion"].ToString();
        }
    }

}

我的创业是这样的:

using Microsoft.Owin;
using Owin;

[assembly: OwinStartupAttribute(typeof(LuloWebApi.App_Start.Startup))]
namespace LuloWebApi.App_Start
{
    public partial class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            ConfigureAuth(app); 
            //
        }
    }
}

和我的 web api 配置

using LuloWebApi.Components;
using System.Diagnostics.CodeAnalysis;
using System.Web.Http;
using System.Web.Http.ExceptionHandling;

namespace LuloWebApi
{
    [SuppressMessage("NDepend", "", Scope = "deep")]
    public static class WebApiConfig
    {
        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 { id = RouteParameter.Optional }
            );

            config.Services.Add(typeof(IExceptionLogger), new AiExceptionLogger());
        }
    }
}

路由配置

 [SuppressMessage("NDepend", "", Scope = "deep")]
    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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

但是当我去:http://localhost:4478/api/Version

我找不到资源,我在这里缺少什么?

【问题讨论】:

    标签: c# asp.net .net asp.net-mvc


    【解决方案1】:

    您使用“RoutePrefix”而不是“Route”

    [RoutePrefix("api/Version")]
    public class VersionController : ApiController
    
    [Route("api/Version")]
    public class VersionController : ApiController
    

    路由前缀将被添加到您的路由中,但它本身并不是真正的路由。

    编辑: 在您的路由配置中,您还需要通过该行指定您使用路由属性:

    config.MapHttpAttributeRoutes();
    

    【讨论】:

    • 当我添加最后一行时,我得到这个: System.ArgumentException: 'A route named 'MS_attributerouteWebApi' is already in the route collection。路由名称必须是唯一的。
    • 大声笑,忘了它,我已经在代码中了
    猜你喜欢
    • 1970-01-01
    • 2013-05-13
    • 2018-01-07
    • 1970-01-01
    • 2020-07-24
    • 2017-12-12
    • 2019-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多