我有一个基本的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) 我正在使用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配置
MacBook Pro配置
更新1: 我已经安装了visual studio update 2并仍然收到相同的错误消息.我很欣赏这个建议!
更新2:感谢您的建议.我编辑了配置,更改了超时设置,并按照建议重新启动了构建服务器.附加到实际设备的错误已更改为具有相同结果的警告.模拟器保持相同的错误.
现在警告说:
超时启动应用程序.检查您与mac的网络连接,然后再次尝试>.如果要启动设备,请确保已启用Web Inspector>.
我确实启用了Web检查器.在返回错误或警告之前,似乎视觉工作室没有等待整整一分钟.此外,Visual Studio环境在尝试连接到设备或模拟器时似乎挂起(没有响应).
我也尝试过多个网络并获得相同的结果.
我可能提供的其他信息是否有帮助?
更新3:
我可能提供的任何其他建议或其他信息?我真的很难过.幸运的是,这不是一个showstopper,因为我可以在部署到设备时在safari中进行一些调试,但这令人沮丧.
在尝试连接到设备进行调试时,visual studio是否通常会挂起?
我也不相信visual studio正在等待已配置的超时设置的整个持续时间.
我已经更新了我能够想到的每一个依赖项,并确保了在ios和windows上的cordova版本匹配.我在这里难过......
背景
我刚刚开始了一个新项目,并希望将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) 我如何配置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字符串“ …