在WebApi控制器中使用字符串作为路由参数.错误405

本文关键字:路由 参数 错误 字符串 控制器 WebApi | 更新日期: 2023-09-27 18:23:48

我正在尝试在WebApi控制器中使用字符串作为参数。我将自定义路由设置为[route("api/sets/{setid}")],但这也没有帮助。控制器代码非常简单,我真的不知道错误405的问题是什么。这是控制器代码:

public class SetDetails
        {
            public string ItemDescription { get; set; }
            public string ItemName { get; set; }
            public string ItemUrl { get; set; }
            public string ItemImageUrl { get; set; }
            public decimal ItemPrice { get; set; }
        }
        // GET: api/Sets
        [Route("api/sets/{setid}")]
        public IQueryable<SetDetails> GetDetails(string setid)
        {
            var sd = from a in db.Sets
                     where a.SetID.Contains(setid)
                     select new SetDetails
                     {
                         ItemDescription = a.ItemDescription,
                         ItemName = a.ItemName,
                         ItemUrl = a.ItemUrl,
                         ItemImageUrl = a.ItemImageUrl,
                         ItemPrice = a.ItemPrice
                     };
            return sd.AsQueryable();
        }

这是WebApiConfig

public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API routes
            config.MapHttpAttributeRoutes();
            config.Routes.MapHttpRoute(
                name: "PreppApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
            var json = config.Formatters.JsonFormatter;
            json.SerializerSettings.PreserveReferencesHandling =
                Newtonsoft.Json.PreserveReferencesHandling.Objects;
            config.Formatters.Remove(config.Formatters.XmlFormatter);
        }
    }

在WebApi控制器中使用字符串作为路由参数.错误405

与其附加查询字符串参数,不如让WebApi路由将其从URL 的最后一部分中提取出来

$.getJSON("/api/sets/" + setid);