Tag: asp.net web api

将Web API和API文档添加到现有MVC项目中

我已经成功地将web api controller添加到现有的MVC4应用程序中。 我想拥有新的web api示例中提供的api文档function(ex. http://sample.hostname.com/help) 。 我相信这些使用ApiExplorer类。 我试过将HelpPage区域复制到我的项目中,但是我收到了一个错误 “无法构造String类型。您必须配置容器以提供此值” 当我尝试导航帮助。 我该怎么做才能添加API的自动文档?

ASP.NET MVC4和Web API身份validation+授权(Windows 8和Web)

我使用Simple Membership db创建了一个ASP.NET MVC 4 Internet Web应用程序,用于存储用户,角色和配置文件。 在我的应用程序中,我创建了一个Web API控制器,它将响应http:// 127.0.0.1/api/users ,此调用将返回存储在db中的所有用户的列表作为JSON 。 UsersController使用[Authorize]属性进行修饰,因此必须对对http:// 127.0.0.1/api/users任何调用进行身份validation。 在主页面上,我有一个按钮,一旦按下jQuery ajax get请求就会执行,并将显示Web API(json)返回的用户列表。 如果我登录并按下按钮,一切正常……检索并显示用户列表。 如果我没有登录,则消息显示为401 – Unauthorized (jquery调用statusCode中的自定义消息),因此它可以正常工作,因为[Authorize]属性。 我的问题:如何在Web API向其发出请求,获取用户列表以及从Windows 8应用程序或Windows Phone 8或Windows Forms中显示这些用户列表时如何进行身份validation? 换句话说,来自Web浏览器以外的客户端?

始终有错误“ObjectContent 1类型无法序列化响应正文…”

我使用Web api从数据库中检索数据。 我只有一个表“tblMessage”,并希望从该表中获取数据。 我设置了所有内容但是当我运行网站时。 错误总是说 ‘ObjectContent`1’类型无法序列化内容类型’application / xml的响应主体 我在stackoverflow上读了一些post,说明错误可以通过告诉浏览器以json格式输出数据来修复。 之后,错误就变成了 ‘ObjectContent`1’类型无法序列化内容类型’application / json的响应主体 我已尝试过以下post中的所有解决方案,但他们没有解决问题(浏览器报告相同的错误) Web API错误:’ObjectContent`1’类型无法序列化内容类型的响应正文 无法序列化内容类型的响应正文 Web API错误:’ObjectContent`1’类型无法序列化内容类型的响应正文 这个错误究竟是什么? public interface IMessage { IQueryable GetAll(); } public class Message { [Key] public int i_StmID { get; set; } public string vch_MsgString { get; set; } } public class EFDBContext : DbContext { public DbSet […]

使用HttpServer或HttpSelfHostServer对Web API进行unit testing

我正在尝试为Web API项目进行一些unit testing。 我要模拟Web API托管环境。 好像我可以使用内存主机(HttpServer)或自主机(HttpSelfHostServer)。 只是想知道有什么区别,哪种技术对什么有好处,并且对这些选项有任何限制。

无法为generics类型创建TypeConverter

我想为generics类创建一个TypeConverter ,如下所示: [TypeConverter(typeof(WrapperConverter))] public class Wrapper { public T Value { // get & set } // other methods } public class WrapperConverter : TypeConverter { // only support To and From strings public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) { if (sourceType == typeof(string)) { return true; } return base.CanConvertFrom(context, sourceType); } public override […]

为ASP.Net Web API生成JSON模式

我正在寻找为WebAPI生成JSON Schema,包括来自XML注释的文档。 主要是因为我可以将其导入到我们的API文档中(使用apiary.io)我设法通过添加swagger(和swashbuckle)然后在每个服务上使用原始链接来获得解决方案 – 但理想情况下我会比较干净的东西,适用于所有api(这必须按服务/控制器完成),并没有这么多的依赖。 在我开始看看swagger是如何做这个并看看它是否可以被提取之前,如果有现成的方法可以做到这一点会很好吗?

如何将web api用作Web服务?

我已经创建了一个测试ASP.Net Web Api,现在我想知道如何在Windows窗体应用程序中将它用作Web服务? 当前url为http://localhost:59682 ,当我添加http://localhost:59682或http://localhost:59682/api/或http://localhost:59682/api/products/作为网络服务参考时我收到此错误: There was an error downloading ‘http://localhost:59682/api/products/$metadata’. The request failed with HTTP status 400: Bad Request. Metadata contains a reference that cannot be resolved: ‘http://localhost:59682/api/products/’. The remote server returned an unexpected response: (405) Method Not Allowed. The remote server returned an error: (405) Method Not Allowed. If the service is defined […]

具有默认值的Asp.net webapi枚举参数

我有一个控制器 [HttpGet] [RoutePrefix(“api/products/{productId}”)] public HttpResponseMessage Products(int productId,TypeEnum ptype=TypeEnum.Clothes) { if(!Enum.IsDefined(typeOf(TypeEnum),ptype)) //throw bad request exception else //continue processing } Myenum被宣布为 public TypeEnum { Clothes, Toys, Electronics } 目前,如果传递了一些垃圾值,它将被转换为默认值。 我想要做的是如果我将控制器称为api / products / 1,那么应该为ptype指定默认值即衣服。 如果我将控制器称为api / products / 1?pType = somegarbagevalue,那么控制器应抛出错误的请求exception。 我怎样才能做到这一点?

MVC 4 Web API寄存器filter

我正在使用MVC 4 Web API为应用程序创建服务层。 我正在尝试创建一个全局filter,它将对API的所有传入请求起作用。 现在我明白这必须配置不同于标准的MVC全局动作filter。 但我遇到的问题是我在网上找到的任何一个例子。 我遇到的问题是使用Web API注册filter。 我的Global.asax设置如下…… public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { AreaRegistration.RegisterAllAreas(); MVCConfig.RegisterRoutes(RouteTable.Routes); MVCConfig.RegisterGlobalFilters(GlobalFilters.Filters); WebApiConfig.RegisterRoutes(GlobalConfiguration.Configuration); WebApiConfig.RegisterGlobalFilters(GlobalConfiguration.Configuration.Filters); } } 我的标准Mvc路由和filter正常工作。 和我的WebApi路由一样。 以下是我对webApifilter注册的内容… public static void RegisterGlobalFilters(System.Web.Http.Filters.HttpFilterCollection filters) { filters.Add(new PerformanceTestFilter()); } 这是PerformanceTestFilter …… public class PerformanceTestFilter : ActionFilterAttribute { private readonly Stopwatch _stopWatch = new Stopwatch(); public […]

如何在ASP.NET WebApi的每个请求上对JWT令牌应用自定义validation?

在使用承载令牌validationWeb api呼叫时,是否可以为每个请求添加自定义validation? 我正在使用以下配置,应用程序已经正确validation了JWT令牌。 app.UseOAuthAuthorizationServer(new OAuthAuthorizationServerOptions { AuthenticationType = “jwt”, TokenEndpointPath = new PathString(“/api/token”), AccessTokenFormat = new CustomJwtFormat(), Provider = new CustomOAuthProvider(), }); app.UseJwtBearerAuthentication(new JwtBearerAuthenticationOptions { AllowedAudiences = new[] { “all” }, IssuerSecurityTokenProviders = new[] { new SymmetricKeyIssuerSecurityTokenProvider(Config.JWT_Issuer, Config.JWT_Key) },, }); 现在,由于令牌设置为永不过期,我想为使用不记名令牌的每个请求添加一个额外的自定义validation步骤,因此我可以根据请求validation一些其他信息,并在需要时拒绝访问。 在每个请求中添加此validation的正确位置在哪里?