【问题标题】:Controller Action Not Reaching in ASP.NET Web APIASP.NET Web API 中未达到控制器操作
【发布时间】:2015-06-02 14:06:02
【问题描述】:

我有一个使用 ADO.NET Framework 的 OData web api,其中控制器操作以某种方式无法实现。

API 正确接收 HTTP 请求并对其进行解析以执行正确的操作,但未到达该操作。

作为回报,Chrome 浏览器会显示身份验证窗口。

我调试了这么久,但不知道如何解决这个问题。

控制器是(剥离版):

 public class DataController : ODataController
 {
    private readonly DataModel DataAccessModel = new DataModel();


   public DataController()
   {
      ....... 
   }

   [HttpGet, EnableQuery]
   public IQueryable<Record> GetRecord(ODataQueryOptions<Record> options)
   {

       try
       {
           IQueryable<ActivationRequestLog> result;
           try
           {

               result = DataAccessModel.Recordss;
           }
           catch (Exception ex)
           {
              ......
           }
      } 

  } 
}

【问题讨论】:

  • 您的项目中的 Startup.Auth 类中是否设置了 Windows 身份验证?
  • 尝试在方法顶部添加 [AllowAnonymous]?
  • [HttpGet] 属性是否自动将任何函数映射到 OData GET 函数?如果没有,请尝试使用public IQueryable&lt;Record&gt; Get(ODataQueryOptions&lt;Record&gt; options) 而不是public IQueryable&lt;Record&gt; GetRecord(ODataQueryOptions&lt;Record&gt; options)。如果您提供WebApiConfig,那也很好。

标签: c# .net asp.net-mvc visual-studio odata


【解决方案1】:

您能说明控制器是如何在 WebApiConfig 类中注册的吗?

如果您使用的是 ODataConventionModelBuilder,那么您必须遵循实体集控制器的某些命名约定。

例如如果我注册一个航空公司类型的航空公司实体集

        builder.EntitySet<Airline>("Airlines");

....然后默认/约定我需要实现

public class AirlinesController : ODataController<Airline>
   {
        [EnableQuery]
        public IQueryable<Airline> Get()
        {
            DB db = Request.GetContext();
            return db.Airlines();
        }
   }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    • 2019-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多