簡體   English   中英

找不到帶有屬性路由的ASP.NET Web API路由

[英]ASP.NET Web API Route not found with Attribute Routing

我有一個包含多個控制器的ASP.NET Web API項目。 所有控制器都處理數據庫中存在的模型,但只有一個。 並且此控制器未解決他的(一個)動作。 這是控制器:

[RoutePrefix("api/MobileStations")]
public class MobileStationsController : ApiController
{
    /// <summary>
    /// Gets all clients
    /// </summary>
    /// <returns>All clients</returns>
    [HttpGet]
    [ActionName(nameof(GetMobileStationsAsync))]
    [Route("", Name = "GetMobileStations")]
    public static async Task<IEnumerable<MobileStation>> GetMobileStationsAsync()
    {
        var snmpConfig = CiscoWlcSnmpHelpers.ReadSnmpConfiguration();

        var clients = await CiscoWlcSnmpHelpers.GetAllClientsWithAllAccessPointsFromAllWirelessControllersAsync(snmpConfig);

        return clients;
    }
}

我在所有Controller中使用屬性路由,用法完全相同。 這是WebApiConfig.cs中的Register方法:

/// <summary>
/// Registers the config
/// </summary>
/// <param name="config"></param>
public static void Register(HttpConfiguration config)
{

    // Attribute routing
    config.MapHttpAttributeRoutes();

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

    config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
    config.Formatters.Remove(config.Formatters.XmlFormatter);
    config.Filters.Add(new ValidateModelAttribute());

    var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
    json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;
}

我將路由調試器用於此結果。 網址是api/Mobilestations 找不到路線

路線選擇表的節選: 未檢測到路線

因此,他使用默認路由。 為什么僅在此控制器上未檢測到我的自定義路由? 這是唯一不訪問數據庫獲取信息的數據庫。 DAL中沒有表MobileStation,我不想將一個空表放入數據庫中,只是為了使其正常工作。 路由引擎關心數據庫什么?

動作不能是靜態方法

控制器上的哪些方法被視為“動作”? 選擇動作時,框架僅查看控制器上的公共實例方法 而且,它不包括“特殊名稱”方法(構造函數,事件,運算符重載等)以及從ApiController類繼承的方法。

來源: ASP.NET Web API中的路由和操作選擇:操作選擇

將動作更新為實例方法

[RoutePrefix("api/MobileStations")]
public class MobileStationsController : ApiController {

    /// <summary>
    /// Gets all clients
    /// </summary>
    /// <returns>All clients</returns>
    [HttpGet]
    [ActionName(nameof(GetMobileStationsAsync))]
    [Route("", Name = "GetMobileStations")] //GET api/MobileStations
    public async Task<IEnumerable<MobileStation>> GetMobileStationsAsync() { ... }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM