【问题标题】:web api2 RESTful GET not returning get by idweb api2 RESTful GET不返回按ID获取
【发布时间】:2015-05-18 16:28:21
【问题描述】:

不太清楚我错过了什么

标准 webapiconfig.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;

namespace MROVendorWebAPI
{
    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}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }
    }
}

相当基本的控制器

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using MROVendorWebAPI.Models;

namespace MROVendorWebAPI.Controllers
{
    public class VSMRICSController : ApiController
    {



        public IEnumerable<DB2VsmRicRecord> GetDB2VsmRicRecords()
        {
            string ErrorDescription = "";
            DB2VsmRicCollection myDB2VsmRicCollection = new DB2VsmRicCollection();
            if (myDB2VsmRicCollection.CreateCollection(ref ErrorDescription))
            {
                return myDB2VsmRicCollection.oDB2VsmRicList;
            }
            return null;
        }



        public DB2VsmRicRecord GetDB2VsmRicRecord(string ric)
        {
            string ErrorDescription = "";
            DB2VsmRicCollection myDB2VsmRicCollection = new DB2VsmRicCollection();
            if (myDB2VsmRicCollection.CreateCollection(ref ErrorDescription))
            {
                return myDB2VsmRicCollection.oDB2VsmRicList.FirstOrDefault(p => p.Ric == ric);
            }
            return null;
        }

    }
}

使用 /api/VSMRICS 可以正常工作并返回整个集合 并且使用 /api/VSMRICS?RIC=SAH 可以正常工作并且只返回一条记录,但是 /api/VSMRICS/SAH 会返回整个集合。不知道为什么我需要在控制器中为这个方法添加某种路由?

【问题讨论】:

    标签: asp.net-web-api asp.net-web-api-routing


    【解决方案1】:

    没关系,它需要是

    public DB2VsmRicRecord GetDB2VsmRicRecord(string id)
    

    【讨论】:

      【解决方案2】:

      在常规路由中,它会搜索在路由中作为 id 提及的 RouteParameter。

      您也可以在这里更改路线,如下所示:

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

      为了支持您的 API:

      public DB2VsmRicRecord GetDB2VsmRicRecord(string ric)
      {
         string ErrorDescription = "";
         DB2VsmRicCollection myDB2VsmRicCollection = new DB2VsmRicCollection();
         if (myDB2VsmRicCollection.CreateCollection(ref ErrorDescription))
         {
            return myDB2VsmRicCollection.oDB2VsmRicList.FirstOrDefault(p => p.Ric == ric);
         }
         return null;
      }
      

      【讨论】:

        猜你喜欢
        • 2023-03-14
        • 1970-01-01
        • 2023-03-12
        • 1970-01-01
        • 2017-06-10
        • 2017-11-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多