Tag: asp.net web api

在尝试标记odata时,可查询属性未在mvc 4 web api中进行编译

我正在使用visual studio 2012附带的MVC 4 web api。 据我所知,odata不会自动解析,但我们需要在行动中添加[Queryable]属性。 所以我添加了它: public class TestController : ApiController { [Queryable] public IQueryable GetMyClasses() { return …; } } 但我得到一个编译错误: The type or namespace name ‘Queryable’ could not be found (are you missing a using directive or an assembly reference?) odata仍然受支持吗? 以及为什么Queryable不被识别为此处列出的属性。 谢谢

C#HttpClient PostAsync将204变为404

鉴于此WebApi服务: [ActionName(“KillPerson”)] [HttpPost] public void KillPerson([FromBody] long id) { // Kill } 而这个HttpClient PostAsync调用: var httpClient = new HttpClient { BaseAddress = new Uri(ClientConfiguration.ApiUrl) }; httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(“application/json”)); var serializerSettings = new JsonSerializerSettings { PreserveReferencesHandling = PreserveReferencesHandling.Objects, Formatting = Formatting.Indented, ReferenceLoopHandling = ReferenceLoopHandling.Serialize }; var serializedParameter = JsonConvert.SerializeObject(parameter, serializerSettings); var httpContent = new StringContent(serializedParameter, Encoding.UTF8, “application/json”); […]

自动生成的帮助页面,返回类型为HttpResponseMessage

关于web api自动生成的帮助页面,我将不胜感激。 据我所知,如果我返回一个Type,它将自动生成该操作的帮助页面并附带一个示例。 但是如果我使用HttpResponseMessage而不是可以理解它无法猜测响应将是什么,并且只能对请求参数做出假设。 我使用HttpResponseMessage的原因是因为当它可能不同于200时,建议您指明要返回的状态代码。 那么,能够返回所需状态代码的最佳实践方法是什么 ,但仍然有帮助页面确定您要返回的类型?

如何在ASP.NET Web API上对Action Filter执行依赖项注入

我真的陷入了将dependency injection到web api的动作filter中的方法。 我有一个这样的动作filter: public class AuthorizationAttribute : ActionFilterAttribute { public IApiKeyRepository Repository { get; set; } private Guid GetApiKey(string customerKey) { return Repository.GetApiKey(customerKey); } public override void OnActionExecuting(HttpActionContext actionContext) { } } 我想通过使用Windsor在属性Repository上进行属性注入(但是使用哪个IoC容器并不重要) 我确实想要自定义FilterProvider,但它没有为我工作,有没有人有解决方案或运行代码? 非常感谢

如何在asp.net core web api(没有第三方)中实现JWT Refresh Tokens?

我正在使用使用JWT的asp.net核心实现web api。 我正在尝试学习,我没有使用像IdentityServer4这样的第三方解决方案。 我已经让JWT配置工作了,但我很难知道如何在JWT到期时实现刷新令牌。 下面是startup.cs中我的Configure方法中的一些示例代码。 app.UseJwtBearerAuthentication(new JwtBearerOptions() { AuthenticationScheme = “Jwt”, AutomaticAuthenticate = true, AutomaticChallenge = true, TokenValidationParameters = new TokenValidationParameters() { ValidAudience = Configuration[“Tokens:Audience”], ValidIssuer = Configuration[“Tokens:Issuer”], ValidateIssuerSigningKey = true, IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration[“Tokens:Key”])), ValidateLifetime = true, ClockSkew = TimeSpan.Zero } }); 下面是用于生成JWT的Controller方法。 出于测试目的,我已将到期时间设置为30秒。 [Route(“Token”)] [HttpPost] public async Task CreateToken([FromBody] CredentialViewModel model) { try […]

将逻辑调用上下文从OWIN管道传递到WebApi控制器

我正在尝试根据Stephen Cleary的post传递关于逻辑调用上下文的上下文信息(使用CallContext.LogicalSetData(CallContextKey, value) ) http://blog.stephencleary.com/2013/04/implicit-async-context-asynclocal .html ; 并受到https://github.com/neuecc/OwinRequestScopeContext中代码的启发。 该值将在OWIN管道中可用,但在呼叫进入WebApi控制器时不可用,该值未设置。 我还注意到在控制器中设置断点时,我看不到调用堆栈中的OWIN管道。 显然,ASP.NET正在单独的调用上下文中进行控制器调用。 所以, 为什么(以及如何)ASP.NET将调用上下文从OWIN管道隔离到WebApi控制器? 如何将上下文数据从Pipeline传递到控制器?

Web Api 2 API无法识别路由的多个属性(版本控制)

我正在尝试从RoutingConstaints Sample实现属性路由和VersionedRoute ,但是当我在控制器上使用两者时,版本化属性不再起作用。 我需要修改属性以使其与属性路由一起使用? 对于代码示例,请下载示例项目(或者只查看上面链接中的几个文件),然后修改路由: // When I use the RoutePrefix, VersionedRoute no longer works (Sending “Api-Version” through http header doesn’t route correctly // If I remove the RoutePrefix I can use VersionedRoute again // What do I need to change in its code to be able to use both? [VersionedRoute(“api/Customers”, 1)] // This route […]

ASP.NET WebAPI JSON绑定案例敏感性

从ASP.NET WebAPI Beta升级到RC已经提供了一些兴奋和很多挫折感。 我已经能够解决大多数问题,但是现在正在咬我的是JSON请求数据的区分大小写。 用于JSON请求的格式化程序(默认情况下是JSON.NET格式化程序)似乎区分大小写,而用于表单urlencoded数据的格式化程序则不区分大小写。 有没有办法配置JSON请求以使用不区分大小写的格式化程序? 这是一个简单的例子来说明我对JSON请求的问题: HTML / JavaScript Click here! $(function () { $(“#tester”).on(“click”, function() { $.ajax({ type: “POST”, url: “/Api/Test/Index/” + 168, data: ko.toJSON({ key: 123, value: “test value” }), // THIS FAILS // Key: 123, Value: “test value” <- BUT THIS WORKS contentType: "application/json; charset=utf-8", statusCode: { 200: function () { […]

使用ASP Identity 2 POST到/ Token端点时始终收到’invalid_client’错误

大约一个月前,我有一个项目与ASP Identity OAuth完美配合。 我将使用grant_type,username和password向/ Token端点发送POST请求,所有这些都是花花公子。 我最近开始了一个基于Visual Studio 2013 RC2的SPA模板的新项目。 它与旧模板有点不同。 身份validation设置为非常基本的默认值, OAuthOptions = new OAuthAuthorizationServerOptions { TokenEndpointPath = new PathString(“/Token”), //AuthorizeEndpointPath = new PathString(“/Account/Authorize”), Provider = new ApplicationOAuthProvider(PublicClientId), AccessTokenExpireTimeSpan = TimeSpan.FromDays(14), AllowInsecureHttp = true }; 默认模板没有任何重大变化。 我可以通过我实现的Web API控制器方法成功注册帐户; // POST: /Account/Register [HttpPost] [AllowAnonymous] public async Task Register(RegisterBindingModel model) { if (ModelState.IsValid) { var user = […]

Web API 2 / MVC 5:属性路由将参数作为查询字符串传递,以在同一控制器上定位不同的操作

我一直在使用新的Web API 2(看起来非常有前途)但我有点头疼让一些路由工作。 当我有GetAllUsers / GetUser(int id)时,一切正常,但是当我添加GetUserByName(字符串名称)和/或GetUserByUsername(字符串用户名)时,事情开始令人毛骨悚然。 我知道int将是第一个,我可以重新排序路线,但让我们想象下面的场景: 用户可以拥有有效的username=1234或者name=1234 (我知道它不太可能,但我们需要防止任何可能的情况)我们可能在数据库中有一个有效的1234 ID,并且所有路由都将被混淆。 也许这是我们需要在新的WebAPI 2上使用的东西,所以我想我可以带来一个“解决方法”,将filter作为查询字符串传递给同一个控制器中的不同操作,例如api/users/?username=1234 (GetUserByUsername)或api/users/?name=1234 (GetUserByName) 但我不能让查询字符串通过……实际上上面的任何查询字符串选项都被GetAllUsers捕获。 有没有人对这种情况有任何建议/解决方案? 非常感谢