Tag: asp.net web api

在控制器中生成令牌

我正在使用Owin和ASP.NET Identity来使用OAuth令牌来保护我的Web API方法。 令牌子系统设置如下: var oauthOptions = new OAuthAuthorizationServerOptions() { TokenEndpointPath = new PathString(“/Token”), Provider = new SimpleAuthorizationServerProvider(), AccessTokenFormat = new TicketDataFormat(app.CreateDataProtector(typeof(OAuthAuthorizationServerMiddleware).Namespace, “Access_Token”, “v1”)), RefreshTokenFormat = new TicketDataFormat(app.CreateDataProtector(typeof(OAuthAuthorizationServerMiddleware).Namespace, “Refresh_Token”, “v1”)), AccessTokenProvider = new AuthenticationTokenProvider(), RefreshTokenProvider = new AuthenticationTokenProvider(), AccessTokenExpireTimeSpan = TimeSpan.FromDays(14), AllowInsecureHttp = true }; app.UseOAuthAuthorizationServer(oauthOptions); app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()); 它适用于基于用户名/密码请求令牌然后使用这些令牌。 但是,由于用户在访问呈现SPA的控制器时已经过身份validation,因此我想在我的视图中生成令牌并将其传递给Javascript代码,而不必再次在SPA中登录。 所以我的问题是:如何手动生成令牌,以便将其包含在SPA视图中?

使用ASP.NET Web API,控制器如何返回使用DotNetZip Library压缩的流图像集合?

如何创建Web API控制器,生成并返回从内存中JPEG文件(MemoryStream对象)集合流式传输的压缩zip文件。 我正在尝试使用DotNetZip库。 我找到了这个例子: http : //www.4guysfromrolla.com/articles/092910-1.aspx#postadlink 。 但是,Response.OutputStream在Web API中不可用,因此该技术不能正常工作。 因此我尝试将zip文件保存到新的MemoryStream中; 但它扔了。 最后,我尝试使用PushStreamContent。 这是我的代码: public HttpResponseMessage Get(string imageIDsList) { var imageIDs = imageIDsList.Split(‘,’).Select(_ => int.Parse(_)); var any = _dataContext.DeepZoomImages.Select(_ => _.ImageID).Where(_ => imageIDs.Contains(_)).Any(); if (!any) { throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotFound)); } var dzImages = _dataContext.DeepZoomImages.Where(_ => imageIDs.Contains(_.ImageID)); using (var zipFile = new ZipFile()) { foreach […]

JSON.NET:如何根据父(持有者)对象值反序列化接口属性?

我有这样的课程 class Holder { public int ObjType { get; set; } public List Objects { get; set; } } abstract class Base { // … doesn’t matter } class DerivedType1 : Base { // … doesn’t matter } class DerivedType2 : Base { // … doesn’t matter } 使用WebAPI我想要接收对象Holder并正确反序列化它。 基于ObjType值,我需要将Objects属性反序列化为List ( ObjType == 1 )或List […]

为Web Api 2和OWIN令牌身份validation启用CORS

我有一个ASP.NET MVC 5 webproject(localhost:81),它使用Knockoutjs从我的WebApi 2项目(localhost:82)调用函数,以便在我启用CORS的两个项目之间进行通信。 到目前为止,一切都有效,直到我尝试对WebApi实现OWIN令牌认证。 要在WebApi上使用/ token端点,我还需要在端点上启用CORS,但经过几个小时的尝试和搜索解决方案后,它仍在运行,并且api / token仍然会导致: XMLHttpRequest cannot load http://localhost:82/token. No ‘Access-Control-Allow-Origin’ header is present on the requested resource. public void Configuration(IAppBuilder app) { app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll); TokenConfig.ConfigureOAuth(app); … } TokenConfig public static void ConfigureOAuth(IAppBuilder app) { app.CreatePerOwinContext(ApplicationDbContext.Create); app.CreatePerOwinContext(AppUserManager.Create); OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions() { AllowInsecureHttp = true, TokenEndpointPath = new PathString(“/token”), AccessTokenExpireTimeSpan […]

如何将OData查询与DTO映射到另一个实体?

我的问题与此问题非常相似: 如何将针对DTO的OData查询映射到EF实体? 我有一个简单的设置来测试ASP.NET Web API OData V4 $filterfunction。 我想做的是“别名”ProductDTO的一些属性以匹配Product实体的属性。 用户将使用以下请求调用ProductsController: GET产品?$ filter = DisplayName eq’test’ 产品类: public class Product { public int Id { get; set; } public string Name { get; set; } public int Level { get; set; } public Product() { } } ProductDTO类: public class ProductDTO { public int Id { […]

使用newtonsoft或restsharp反序列化json字符串

我有一个字符串,它来自一个Json格式的数据库。 我试图用以下方法反序列化它: RestSharp.Deserializers.JsonDeserializer deserial = new JsonDeserializer(); var x = deserial .Deserialize(myStringFromDB) 但.Deserialize函数需要一个IRestResponse 有没有办法使用RestSharp来反序列化原始字符串?

在asp.net web api中使用FromBody时,字符串值为空

我使用的是asp.net核心web api。 下面是我的简单post函数,它有一个字符串参数。 问题是当我使用[FromBody]时,字符串保持为空。 我正在使用PostMan来测试我的服务。 我希望原始数据从客户端传递到我的控制器。 在Postman中我选择了体型RAW,并设置了标题Content-Type text / plain。 Raw Body包含Just“Hello World”字符串。 [HttpPost] [Route(“hosted-services/tokenize-card”)] public IActionResult Test([FromRoute]decimal businessKey,[FromBody] string body) { var data = businessKey; return new JsonResult(“Hello World”); }

JSON.Net自定义合同序列化和集合

我正在尝试创建一个IContractResolver来简化我在WebApi项目上的安全处理。 我在尝试什么: 我想基于一组动态条件序列化某些对象/属性(例如,调用端点的用户的角色)。 所以我实现了一个在Interface的CreateProperty覆盖中检查的自定义属性,并将ShouldSerialize函数设置为我自己的逻辑。 我现在的问题是,是否有可能有条件地序列化某个列表中的完整对象? 而不是在预处理步骤中过滤列表(这很容易出错,如果我更改了我的对象),我希望它由当前的ContractResolver递归处理。 在某种程度上,我试图得到这样的东西: override void CreateObject(JSONObject ob){ if ( ob.DeclaringType == MyType) { ob.ShouldSerialize = instance => {[…] }; //Custom Logic } } 我错过了覆盖,这根本不可能吗? 有没有更好的方法来实际做到这一点,而我不必“预先解析”我的所有价值观?

如何开始使用OAuth来保护Web API应用程序?

我有一个Web API应用程序,我知道OAuth将是API的标准安全模型,其中Authentication Server将负责生成授权令牌,以便用户可以发送到我们的服务器并使用服务。 我对此很新,但我理解所涉及的角色: 资源所有者 客户 资源服务器 授权服务器 但OAuth究竟在实践中是什么,而不是理论上的? 它是一个.NET库吗? 这是一家由独立公司提供的服务吗? 这是我可以在我的本地开发机器上配置的东西,看看它是如何工作的? 如何开始使用OAuth来保护Web API应用程序?

转换自定义操作筛选器以供Web API使用?

我发现了一个非常好的动作filter,它将逗号分隔的参数转换为generics类型列表: http : //stevescodingblog.co.uk/fun-with-action-filters/ 我想使用它,但它不适用于ApiController,它完全忽略它。 有人可以帮助转换这个用于Web API吗? [AttributeUsage(AttributeTargets.Method)] public class SplitStringAttribute : ActionFilterAttribute { public string Parameter { get; set; } public string Delimiter { get; set; } public SplitStringAttribute() { Delimiter = “,”; } public override void OnActionExecuting(ActionExecutingContext filterContext) { if (filterContext.ActionParameters.ContainsKey(this.Parameter)) { string value = null; var request = filterContext.RequestContext.HttpContext.Request; if (filterContext.RouteData.Values.ContainsKey(this.Parameter) && […]