带有URL c#的Web-Api版本控制

格雷戈里

我现在已经挣扎了好几天,我正在尝试使用url后缀来实现我的API版本。fe http:// localhost / api / v1 / siteshttp:// localhost / api / v2 / sites

我猜我离得很近,但是突然间我把一切搞砸了。

非常感谢您的帮助。

现在我收到:“ System.invalidOperationException:”映射到约束键“ apiVersion”的约束类型“ ApiVersionRouteConstraint”必须实现IhttpRouteConstraint接口。在Global.asax.cs上

Global.asax.cs

using System.Web.Http;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;

namespace HIDDEN
{
    public class WebApiApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            GlobalConfiguration.Configure(WebApiConfig.Register);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }
    }
}

WebApiConfig.cs

using Microsoft.AspNetCore.Mvc.Routing;
using Microsoft.Owin.Security.OAuth;
using System.Web.Http;
using System.Web.Http.Routing;

namespace HIDDEN
{
    public static class WebApiConfig
        {
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services  
            // Configure Web API to use only bearer token authentication.  
            config.SuppressDefaultHostAuthentication();
            config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));

            var contraintResolver = new DefaultInlineConstraintResolver()
            {
                ConstraintMap =
                {
                    ["apiVersion"] = typeof(ApiVersionRouteConstraint)
                }
            };

            // Web API routes  
            config.MapHttpAttributeRoutes(contraintResolver);
            config.AddApiVersioning(o =>
            {
                o.AssumeDefaultVersionWhenUnspecified = true;
                //o.DefaultApiVersion = new ApiVersion(1, 0);
            });

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

            // WebAPI when dealing with JSON & JavaScript!  
            // Setup json serialization to serialize classes to camel (std. Json format)  
            var formatter = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
            formatter.SerializerSettings.ContractResolver = new     Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver();

            // Adding JSON type web api formatting.  
            config.Formatters.Clear();
            config.Formatters.Add(formatter);

        }
    }
}   

RouteConfig.cs

using System.Web.Mvc;
using System.Web.Routing;


namespace HIDDEN
{
    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }
    }
}

SitesController

using FirebirdSql.Data.FirebirdClient;
using System;
using System.Web.Http;
using System.Configuration;
using System.Collections;
using Microsoft.Web.Http;

        namespace HIDDEN.Controllers.V1
        {
        [ApiVersion("1.0")]
        [Route("api/v{version:apiVersion}/[controller]")]

        public class SitesController : ApiController
        {
              //code for V1
        }

        namespace HIDDEN.Controllers.V2
        {
        [ApiVersion("2.0")]
        [Route("api/v{version:apiVersion}/[controller]")]

        public class SitesController : ApiController
        {
              //code for V2
        }
    }
哈斯塔·塔曼(Hasta Tamang)

确保您使用的是正确的,ApiVersionRouteConstraint因为Microsoft.AspNetCore.Mvc.Routing之间似乎存在冲突Microsoft.Web.Http.Routing

如果您使用的是此版本控制库Microsoft.AspNet.WebApi.Versioning,则应使用Microsoft.Web.Http.Routing

using Microsoft.Web.Http.Routing;

此外,您还可以apiVersion像下面这样向路线添加约束

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Asp.net .core web api 版本控制不适用于 Url 路径段

来自分类Dev

构建用于版本控制的Web API堆栈

来自分类Dev

如何设置 web api 版本控制?

来自分类Dev

带有C#的Sony Camera API

来自分类Dev

带有Yahoo Weather API的C#

来自分类Dev

自定义MapHttpAttributeRoutes以进行Web Api版本控制

来自分类Dev

Rails API版本控制和forum_url

来自分类Dev

带有phonegap的不同平台的版本控制

来自分类Dev

在Google Cloud Storage中使用带有签名URL的版本控制

来自分类Dev

C#项目中的所有文件是否都需要置于版本控制之下?

来自分类Dev

MVC C# 带有多个参数的错误 URL 处理

来自分类Dev

Azure API管理-版本控制路径架构重复url中的版本

来自分类Dev

如何使用带有C ++语言的Web API?

来自分类Dev

带有 Redmine API 的 Redmine C# 程序

来自分类Dev

带有Entity Framework的ASP Web API控制器非常慢且奇怪

来自分类Dev

Angular-找不到带有Owin + Web API控制器参数的HTTP GET请求

来自分类Dev

带有Entity Framework的ASP Web API控制器非常慢且奇怪

来自分类Dev

基本反向,带有用于版本化API的命名空间URL

来自分类Dev

如何对C#接口进行版本控制?

来自分类Dev

PHP API返回URL,URL中带有多余的“ /”

来自分类Dev

Web Api c# 从 url 获取查询字符串 - Asp.net

来自分类Dev

Web Api 2:带有内容的NotFound()?

来自分类Dev

带有Web API的Ajax Jquery请求

来自分类Dev

带有Java API的Node Web App

来自分类Dev

带有警告的Web API方法

来自分类Dev

带有 Unity 的 Web Api OWIN 主机

来自分类Dev

带有 web.py 的 Restful API

来自分类Dev

带有复选框的jQuery版本控制错误

来自分类Dev

restlet内容类型,带有restlet的版本控制

Related 相关文章

热门标签

归档