Tag: asp.net web api

通过Web API 2流式传输video内容

我正在研究实现以下目标的最佳方法: 我有一堆闭路电视录像文件(MP4文件,大小从4MB到50MB不等),我想通过门户网站提供这些文件。 我的第一个想法是通过Web API流式传输文件,所以我找到了以下链接: Asynchronously streaming video with ASP.NET Web API 在实现示例项目之后,我意识到该示例基于Web API 1,而不是Web API 2.1,这正是我正在使用的。 在做了一些研究之后,我得到了用WebAPI 2.1编译的代码。 然后我意识到,如果我想做流媒体我不能使用MP4文件,这背后有相当多的技术细节,所以这里是线程: 实时HTTP流式传输到HTML5video客户端的最佳方法 似乎这个工作我需要将我的MP4文件编码为像WebM这样的东西,但这需要花费太多时间。 Icecast( http://icecast.org/ ),这是一个流媒体服务器,但我还没有尝试过,再次不确定这是否是我需要做的。 现在我想到了,我实际上不需要直播,我只需要允许客户端通过他们的浏览器播放video文件,也许使用HTML5video元素? 问题是,我的应用程序也需要在IOS上工作,所以我认为这意味着我甚至无法将我的MP4编码为FLV并只使用闪存。 我真正需要的是将所有video剪辑作为缩略图放在网页上,如果客户点击一个,它就会开始尽快播放,而不必下载整个文件。 想想imdb.com上的“Watch Trailer”function。 只需播放video文件,这就是我想要的。 我不需要LIVE流媒体,这就是我认为WebM的用途? 再次,不确定。

从web api返回没有其属性的JsonResult

我有一个Web API控制器,从那里我将一个对象作为JSON从一个动作返回。 我是这样做的: public ActionResult GetAllNotificationSettings() { var result = new List(); // Filling the list with data here… // Then I return the list return new JsonResult { Data = result }; } 但是这样,包含其Data属性的JsonResult对象被序列化为JSON。 所以我通过动作返回的最终JSON如下所示: { “ContentEncoding”: null, “ContentType”: null, “Data”: { “ListItems”: [ { “ListId”: 2, “Name”: “John Doe” }, { “ListId”: 3, […]

使用ASP.NET Web API并排进行基本和表单身份validation

免责声明:首先我要说的是我对MVC4 + Web Api + Web服务+ JQuery的新手。 我可能会以错误的角度攻击这个。 我正在尝试使用C#for .NET 4构建Web MVC App + Web API以在Azure中部署。 web api将由移动客户端(iOS,使用RestKit)使用。 Web MVC应用程序将相对简单。 我们想使用Forms Authentication和SimpleMembership – 我们已经实现并且工作正常。 我们将使用JQuery(Knockout)脚本中的Web API方法来填充网页的各个部分。 因此,我们希望JQuery使用由Forms Authenticationvalidation的相同身份。 但是,我们的想法是Web Api可以由移动客户端直接调用。 没有表格认证。 我们一直在研究Thinktecture身份模型( http://nuget.org/packages/Thinktecture.IdentityModel https://github.com/thinktecture/Thinktecture.IdentityModel.40 )。 我们将BasicAuth和AcessKey处理程序添加到配置中并且它可以工作(请参阅下面的代码)。 当您尝试访问webapi而未经过身份validation时,浏览器将显示基本身份validation对话框并按预期工作。 “问题”是,当您已经通过表单身份validation登录并尝试调用Web Api方法时,您仍然可以获得“基本身份validation”对话框。 换句话说,Thinktecture IdentityModel似乎完全忽略了Forms身份validation。 我的问题是: 我的期望是否正确? 一旦我完成了表单身份validation,我就不应该做任何其他事情让JQuery脚本等从同一个浏览器用户会话访问Web API。 我如何解决它? 如果我的期望不正确; 这应该怎么样? 即:如何使JQuery脚本进行身份validation? 我知道在Stackoverflow中有很多类似的问题,我老实地看了很多,看过video等,但要么我缺少一些明显的东西,要么对于技术新手没有明确的文档。 我很感激帮助。 谢谢。 public static AuthenticationConfiguration […]

为Bearer授权添加额外的逻辑

我正在尝试实施OWIN持票人令牌授权,并基于这篇文章 。 但是,在承载令牌中我需要一条额外的信息,我不知道如何实现。 在我的应用程序中,我需要从持有者令牌中推断出用户信息(比如userid)。 这很重要,因为我不希望授权用户能够充当其他用户。 这可行吗? 它甚至是正确的方法吗? 如果用户标识是guid,那么这很简单。 在这种情况下,它是一个整数。 授权用户可能只是通过猜测/暴力来冒充他人,这是不可接受的。 看看这段代码: public void ConfigureOAuth(IAppBuilder app) { OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions() { AllowInsecureHttp = true, TokenEndpointPath = new PathString(“/token”), AccessTokenExpireTimeSpan = TimeSpan.FromDays(1), Provider = new SimpleAuthorizationServerProvider() }; // Token Generation app.UseOAuthAuthorizationServer(OAuthServerOptions); app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()); } public class SimpleAuthorizationServerProvider : OAuthAuthorizationServerProvider { public override async Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext […]

JWT和Web API(JwtAuthForWebAPI?) – 寻找一个例子

我有一个Angular前面的Web API项目,我想使用JWT令牌来保护它。 我已经进行了用户/通过validation,所以我认为我只需要实现JWT部分。 我相信我已经确定了JwtAuthForWebAPI所以使用它的一个例子会很棒。 我假设任何未使用[Authorize]修饰的方法都会像往常一样运行,并且如果客户端传递的令牌不匹配,则[Authorize]修饰的任何方法都将为401。 我还不知道如何在初始身份validation时将令牌发送回客户端。 我正在尝试使用魔术字符串开始,所以我有这个代码: RegisterRoutes(GlobalConfiguration.Configuration.Routes); var builder = new SecurityTokenBuilder(); var jwtHandler = new JwtAuthenticationMessageHandler { AllowedAudience = “http://xxxx.com”, Issuer = “corp”, SigningToken = builder.CreateFromKey(Convert.ToBase64String(new byte[]{4,2,2,6})) }; GlobalConfiguration.Configuration.MessageHandlers.Add(jwtHandler); 但我不确定最初是如何回到客户端的。 我想我理解如何在客户端上处理这个问题,但是如果你还可以展示这种交互的Angular方面,还可以获得奖励积分。

无法将当前JSON数组(例如)反序列化为类型’TenantManagementWebApi.Entities.Tenant

我有以下错误: JsonSerializationException:无法将当前JSON数组(例如[1,2,3] )反序列化为类型’TenantManagementWebApi.Entities.Tenant’因为该类型需要JSON对象(例如{“name”:”value”} )才能正确反序列化。 要修复此错误,请将JSON更改为JSON对象(例如{“name”:”value”} )或将反序列化类型更改为数组或实现集合接口的类型(例如ICollection, IList ),如List可以从JSON数组反序列化。 JsonArrayAttribute也可以添加到类型中以强制它从JSON数组反序列化。 路径”,第1行,第1位。 我的网络api是这样的: public class TenantModelBinder : IModelBinder { public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext) { if (bindingContext.ModelType != typeof(Tenant)) { return false; } var task = Task.Run(async () => { var model = new Tenant(); if (!actionContext.Request.Content.IsMimeMultipartContent()) { bindingContext.ModelState.AddModelError(bindingContext.ModelName, “WebRequeest content ‘multipart/form-data’ is valid”); } else […]

Web API Action返回类型最佳实践

从这个来源: http : //www.tutorialsteacher.com/webapi/action-method-return-type-in​​-web-api我得到了,Web API中的Action可以返回: 空虚 原始类型或复杂类型 HttpResponseMessage IHttpActionResult 我知道每个选项的作用,但我很好奇是否有一些最佳实践,例如总是使用IHttpActionResult作为返回类型,因为它是所有其他选项的超集。

C#API返回字符串而不是XML包装字符串

我正在使用ApiController,我无法接受调用以返回除XML之外的任何内容。 public class GuideController : ApiController { [AcceptVerbs(“GET”)] [HttpGet] public string Get() { Item item = Item.GetTestData(); string json = JsonConvert.SerializeObject(item); return json; } } 理想情况下,我想正常返回JSON,但我决定返回原始字符串而不是XML包装的字符串。

从Oracle DB检索图像

所以,我正在使用web api来检索图像!! 但是,在DB处,图像是LongRaw。 我在谷歌看到我需要使用OracleDbType.Blob但是,当我尝试使用它时, public IEnumerable GetFoto(string suspid) { DataSet lretorno = new DataSet(); string connectionString = GetConnectionString(); using (OracleConnection connection = new OracleConnection()) { connection.ConnectionString = connectionString; OracleDataReader reader = null; OracleCommand cmd = new OracleCommand(); cmd.InitialLONGFetchSize = 50000; cmd.Connection = connection; cmd = new OracleCommand(“MOBILE.XAPIMANDADOMOBILE.BUSCAFOTO”, connection); cmd.CommandType = CommandType.StoredProcedure; //variáveis entrada cmd.Parameters.Add(new OracleParameter(“SUSPID”, […]

如何通过FromBody将DataTable传递给Web API POST方法(C#)

我从Winforms客户端成功调用Web API应用程序中的POST方法,该客户端传递存储过程的一些参数。 但是,如果可能的话,我希望通过FromBodyfunction将存储过程的结果(我必须首先在客户端上运行)传递给POST方法。 这是通过网络发送的大量数据,但我现在正在这样做的方式我必须运行SP两次 – 首先在客户端Winforms应用程序上,然后在Web API服务器应用程序上,并同时调用此SP似乎有时会引起一些问题。 所以,如果可行,我想通过“FromBody”发送DataTable,或者,如果可取的话,发送数据的XML化或jsonized版本(然后在另一端解压缩,我将其转换为html进行检索)当调用相应的GET方法时。 有人有任何代码可以显示吗? 我可以在这里看到我刚刚通过params的现有代码。 UPDATE 好的,基于Amit Kumar Ghosh的回答,我将我的代码更改为: WebApiConfig.cs public static class WebApiConfig { public static void Register(HttpConfiguration config) { // Web API configuration and services // Configure Web API to use only bearer token authentication. config.SuppressDefaultHostAuthentication(); config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType)); // Web API routes config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: “DefaultApi”, routeTemplate: “api/{controller}/{id}”, […]