Articles of asp.net web api

如何在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捕获。 有没有人对这种情况有任何建议/解决方案? 非常感谢

将数据发布到asp.net Web API

我正在试图弄清楚新的ASP.NET Web API。 到目前为止,我已经能够创建此方法签名并连接到它很好并获得有效的响应… [HttpPost] public HttpResponseMessage CreateAccount() 我能够使用fiddler向此方法发送请求,并已validation它正在接收请求。 但是,当我尝试传递数据时,我遇到了问题。 我尝试的第一件事就是…… [HttpPost] public HttpResponseMessage CreateAccount([FromBody]string email, [FromBody]string password) 我输入 电子邮件:XYZ,密码:ABC 进入提琴手请求的主体。 当我这样做时,我得到一个500错误说明 ‘无法将多个参数(’email’和’password’)绑定到请求的内容。 我也试过这个方法签名… [HttpPost] public HttpResponseMessage CreateAccount([FromBody]UserAccountRequestData data) UserAccountRequestData是一个简单的POCO public class UserAccountRequestData { public string Email { get; set; } public string Password { get; set; } } 我说 {电子邮件:XYZ,密码:ABC} 要么 数据:{电子邮件:XYZ,密码:ABC} 进入请求的正文。 在尝试填充POCO的两种情况下,我都能够在调试时访问该方法,但数据对象始终为null。 […]

Web API路由以支持GUID和整数ID

如何支持GUID和整数的GET路由? 我意识到GUID并不理想,但它现在就是它。 我想添加对整数的支持,以便用户更容易记住和传达应该是唯一的“密钥”。 示例路线: testcases/9D9A691A-AE95-45A4-A423-08DD1A69D0D1 testcases/1234 我的WebApiConfig : public static void Register(HttpConfiguration config) { config.MapHttpAttributeRoutes(); var routes = config.Routes; routes.MapHttpRoute(“DefaultApiWithAction”, “Api/{controller}/{action}”); routes.MapHttpRoute(“DefaultApiWithKey”, “Api/{controller}/{key}”, new { action = “Get” }, new { httpMethod = new HttpMethodConstraint(HttpMethod.Get), key = @”^\d+$” }); routes.MapHttpRoute(“DefaultApiWithId”, “Api/{controller}/{id}”, new { action = “Get” }, new { httpMethod = new HttpMethodConstraint(HttpMethod.Get) }); routes.MapHttpRoute(“DefaultApiGet”, […]

Asp.net Web API – 从actionfilter返回数据

我想从wep api actionfilter返回一个json对象。 我怎样才能做到这一点? 我可以从操作返回对象,但我需要在某些条件下从actionfilter返回一些数据。 提前致谢。 编辑:1当我更改如下代码时,浏览器仍然加载没有任何响应,并以超时错误结束。 public class ValidationActionFilter : ActionFilterAttribute { public override void OnActionExecuting(HttpActionContext actionContext) { var modelState = actionContext.ModelState; if (!modelState.IsValid) { List arr = new List(); foreach (var key in modelState.Keys) { var state = modelState[key]; if (state.Errors.Any()) { string er = state.Errors.First().ErrorMessage; if (!string.IsNullOrEmpty(er)) { arr.Add(er); } } } […]