小编Zoo*_*oop的帖子

为什么'DefaultInlineConstraintResolver'无法解析'apiVersion'

我有一个基本的WebApi实现设置与默认值控制器.

阅读关于RESTful WebApi Versioning的博客后,我决定将该软件包集成到一个新的WebApi项目中.

我已经添加了NuGet包Microsoft.AspNet.WebApi.Versioning来协助我的API版本控制.以下是我所遵循的包配置说明的URL:

https://github.com/Microsoft/aspnet-api-versioning/wiki/Configuring-Your-Application

我的价值观控制器非常简单.我已经将装饰添加到了我的Get方法中.这是代码:

[Authorize]
[ApiVersion("1.0")]
[Route("api/v{version:apiVersion}/values")]
public class ValuesController : ApiController
{
    // GET api/values
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }
public string Get(int id)
{
    return "value";
}

// POST api/values
public void Post([FromBody]string value)
{
}

// PUT api/values/5
public void Put(int id, [FromBody]string value)
{
}

// DELETE api/values/5
public void Delete(int id)
{
}
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,只要我将以下代码行添加到控制器中,整个过程就会爆炸:

[Route("api/v{version:apiVersion}/values")]
Run Code Online (Sandbox Code Playgroud)

这是一个正在返回的错误消息:

The inline constraint resolver of type …
Run Code Online (Sandbox Code Playgroud)

c# asp.net asp.net-web-api asp.net-web-api2 api-versioning

18
推荐指数
1
解决办法
8533
查看次数

为什么Visual Studio TACO无法找到我想要调试的应用程序?

我正在使用Visual Studio在Mac上并行运行.Mac用作iOS的构建服务器.我正在尝试从visual studio为模拟器(iPad Air iOS 9.3)和实际设备(实际的iPad Air)进行调试.现在,首先关注模拟器可能会有所帮助.

当我尝试从visual studio或实际设备启动到模拟器(iPad Air)时,我的应用程序在设备或模拟器上启动,之后visual studio似乎挂起了一会儿,最终报告以下错误消息:

我们无法找到您尝试调试的应用.检查>设备是否已连接,唤醒和解锁.此外,请确保已启用Web> Inspector.

设备已连接.在模拟器的情况下,没有设备可以连接.

该设备处于清醒状态并已解锁.在模拟器的情况下,没有什么可以唤醒或解锁.在返回错误消息之前,Visual Studio仍在调试时启动应用程序.

我已经检查并仔细检查以查看在mac上的设备和内部safari上都启用了Web检查器.我能够从XCODE运行构建并通过Safari进行调试.

在Visual Studio返回之前,应用程序实际在模拟器中打开似乎很不寻常,因为它无法找到应用程序.如果visual studio无法找到该应用程序,那么为什么它会启动?

我将非常感谢任何帮助.

环境[更新]

我正在使用在Parallels中运行Windows 10的MacBook Pro.

Windows配置

  • Visual Studio 2015 Update 2
  • 科尔多瓦6.1.1
  • TACO更新8.1
  • 节点6.0.0

MacBook Pro配置

  • 科尔多瓦6.1.1
  • 节点6.0.0
  • iPad Mini 2运行iOS 9.2(13C75)
  • iPad Air 2运行9.2.1(13D15)

更新1: 我已经安装了visual studio update 2并仍然收到相同的错误消息.我很欣赏这个建议!

更新2:感谢您的建议.我编辑了配置,更改了超时设置,并按照建议重新启动了构建服务器.附加到实际设备的错误已更改为具有相同结果的警告.模拟器保持相同的错误.

现在警告说:

超时启动应用程序.检查您与mac的网络连接,然后再次尝试>.如果要启动设备,请确保已启用Web Inspector>.

我确实启用了Web检查器.在返回错误或警告之前,似乎视觉工作室没有等待整整一分钟.此外,Visual Studio环境在尝试连接到设备或模拟器时似乎挂起(没有响应).

我也尝试过多个网络并获得相同的结果.

我可能提供的其他信息是否有帮助?

更新3:

我可能提供的任何其他建议或其他信息?我真的很难过.幸运的是,这不是一个showstopper,因为我可以在部署到设备时在safari中进行一些调试,但这令人沮丧.

在尝试连接到设备进行调试时,visual studio是否通常会挂起?

我也不相信visual studio正在等待已配置的超时设置的整个持续时间.

我已经更新了我能够想到的每一个依赖项,并确保了在ios和windows上的cordova版本匹配.我在这里难过......

ios ionic-framework visual-studio-cordova taco

7
推荐指数
1
解决办法
2611
查看次数

如何解决Swagger错误"实例类型(字符串)与任何允许的基本类型都不匹配......"

背景

我刚刚开始了一个新项目,并希望将Swagger用于我的API文档.我目前在本地运行我的项目,在IIS中托管.

我修改了我的hosts文件,为网站提供了有效的标头.对于这篇文章,让我们说标题是publicapiurl.domain.com.所以,我在主机文件中添加了以下条目:

127.0.0.1   publicapiurl.domain.com
Run Code Online (Sandbox Code Playgroud)

现在,当我输入publicapiurl.domain.com/swagger时,我会得到一个昂首阔步的文档.初始设置似乎很简单,但我的swagger doc右下角有一条红色的'ERROR {...}'消息.错误消息如下:

{"messages":["malformed or unreadable swagger supplied"],"schemaValidationMessages":[{"level":"error","domain":"validation","keyword":"type","message":"instance type (string) does not match any allowed primitive type (allowed: [\"object\"])","schema":{"loadingURI":"#","pointer":""},"instance":{"pointer":""}}]}
Run Code Online (Sandbox Code Playgroud)

我过去曾与Swagger合作过,因此我将提供的链接提供给生成的swagger文档并复制代码.我将代码粘贴到swagger.io/tools编辑器中,看看他们的验证过程可能告诉我什么.我粘贴的代码经过验证,没有任何错误.这是代码:

swagger: '2.0'
info:
  version: v1
  title: Generic.Public.Api
host: publicapiurl.domain.com
schemes:
  - http
paths:
  /api/Values:
    get:
      tags:
        - Values
      operationId: Values_Get
      consumes: []
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        '200':
          description: OK
          schema:
            type: array
            items:
              type: string
    post:
      tags:
        - Values
      operationId: Values_PostByvalue
      consumes:
        - application/json
        - text/json
        - application/xml
        - …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-web-api swagger swagger-2.0 swashbuckle

6
推荐指数
1
解决办法
2478
查看次数

如何使用aspnet ApiVersioning在Swashbuckle中配置MultipleApiVersions

我如何配置swashbuckle以进行Aspnet API验证? https://github.com/Microsoft/aspnet-api-versioning

在我Startup.cs的代码中,我有以下代码用于初始化基于属性的路由,api版本控制和swagger。

var constraintResolver = new DefaultInlineConstraintResolver()
{
    ConstraintMap =
    {
        ["apiVersion"] = typeof( ApiVersionRouteConstraint )
    }
};
config.MapHttpAttributeRoutes(constraintResolver);
config.AddApiVersioning();

config.EnableSwagger(c =>
{
    c.MultipleApiVersions(
        (apiDesc, targetApiVersion) => ResolveVersionSupportByRouteConstraint(apiDesc, targetApiVersion),
        (vc) =>
        {
            vc.Version("v1", "Swashbuckle Dummy API V1");
            vc.Version("v2", "Swashbuckle Dummy API V2");
        });
}



public static bool ResolveVersionSupportByRouteConstraint(ApiDescription apiDesc, string targetApiVersion)
{
    var versionConstraint = (apiDesc.Route.Constraints.ContainsKey("apiVersion"))
        ? apiDesc.Route.Constraints["apiVersion"] as RegexRouteConstraint
        : null;

    return (versionConstraint == null)
        ? false
        : versionConstraint.Pattern.Split('|').Contains(targetApiVersion);
}
Run Code Online (Sandbox Code Playgroud)

当ResolveVersionSupportByRouteConstraintmethod触发时,路由模板包括文字api字符串“ …

c# asp.net-web-api swagger swashbuckle

6
推荐指数
1
解决办法
6266
查看次数