You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OData控制器多GET操作触发404异常问题求助

Hey there! Let's tackle this OData 404 issue with multiple GET methods in your controller—I've run into this exact problem before, so here's what you need to check and fix:

Troubleshooting Multiple OData GET Methods 404 Errors

1. Register Your Custom Methods in the OData Model

First off, OData needs to know about your custom GET functions upfront. If you skip this step, it won't recognize the method in your URL, hence the 404.

In your startup configuration (usually Program.cs or Startup.cs), add a registration for your DisplayDoubleValue method when building the OData model:

builder.EntitySet<Qualification>("Qualifications")
       .EntityType
       .Collection // Use this if your method targets the entire entity collection; omit if it's for a single entity
       .Function("DisplayDoubleValue")
       .Returns<double>(); // Match this to your method's actual return type

Make sure the function name (DisplayDoubleValue) matches exactly what's in your URL—OData is case-sensitive here!

2. Add Explicit OData Route Attributes to Each GET Method

When you have multiple GET methods in a controller, plain [HttpGet] isn't enough to let OData distinguish between them. You need to attach [ODataRoute] to each method with a unique template that matches your request URL.

Example controller code:

public class QualificationsController : ODataController
{
    // Standard GET for the entire entity collection
    [HttpGet]
    [ODataRoute("Qualifications")]
    public IActionResult Get()
    {
        // Your existing logic here
    }

    // Your custom DisplayDoubleValue method
    [HttpGet]
    [ODataRoute("Qualifications/Default.DisplayDoubleValue")]
    public IActionResult DisplayDoubleValue()
    {
        // Your custom logic, e.g., return Ok(2.5);
    }

    // If you have another custom GET method, add its route too
    [HttpGet]
    [ODataRoute("Qualifications/Default.AnotherCustomMethod")]
    public IActionResult AnotherCustomMethod()
    {
        // Logic for this method
    }
}

The Default part refers to OData's default namespace—if you've defined a custom namespace for your methods, replace it here to match your URL.

3. Verify Method Signature & Parameter Matching

If your custom method has parameters, ensure the route template and request URL include them correctly. For example, if your method takes an id parameter:

  • Controller method: public IActionResult DisplayDoubleValue(int id)
  • Route attribute: [ODataRoute("Qualifications/Default.DisplayDoubleValue(id={id})")]
  • Request URL: http://localhost:65321/odata/Qualifications/Default.DisplayDoubleValue(id=123)

Also, double-check that your method's return type matches what you registered in the OData model (the Returns<T> part).

4. Check OData Metadata for Your Method

Visit http://localhost:65321/odata/$metadata and search for DisplayDoubleValue. If you don't see it listed as a function under the Qualifications entity set, your model registration step failed—go back and fix that first.

5. Ensure No Route Conflicts

Make sure your custom method routes aren't being overshadowed by more generic routes. OData matches routes in the order they're registered, so ensure your custom method routes are configured after the base entity routes if needed (though usually, explicit templates take priority).

Following these steps should resolve the 404 error—this was exactly the fix I needed when I had the same issue a while back!

内容的提问来源于stack exchange,提问作者Bug Hunter Zoro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:17:25