Tag: asp.net web api

如何使用Microsoft ASP.NET Web API OData中的Delta 和Code First \ JsonMediaTypeFormatter

有什么问题? 我正在尝试在我的ASP.net web api应用程序中启用修补程序。 我正在使用代码第一entity framework。 我有以下方法标题,我可以设置一个断点,它将命中: [AcceptVerbs(“PATCH”)] public async Task Patch(long appId, long id, Delta formGroup) 但是,当我调用formGroup.Patch(实体)时,不会对我的实体进行任何更改。 如果我将以下内容放入即时窗口: formGroup.GetChangedPropertyNames() 然后这个集合是空的,这似乎是错误的。 我试过了什么? 我一直在提到以下例子 http://techbrij.com/http-patch-request-asp-net-webapi http://www.strathweb.com/2013/01/easy-asp-net-web-api-resource-updates-with-delta / Json MediaType Formatter似乎不知道如何正确构建Delta对象,但是在第二个链接中,filip似乎表明它应该在没有oDataMediaTypeFormatter的情况下工作。 我已经开始试图将我的模型序列化为EDMX表示,然后从那里提取CSDL以便我可以创建一个oDataMediaTypeFormatter,但我也遇到了障碍,加上它似乎有点矫枉过正。 如果有人能够对此有所了解,那将非常感激。 如果需要更多信息,请与我们联系。 编辑: 这是SimpleFormGroup的类定义: public class SimpleFormGroup { public int LastUpdate; public string Identifier; public string Title; public int DisplayOrder; } 这是我发送的数据: Content-Type: ‘application/json’ { […]

用于将Windows应用程序连接到MVC 4的Web服务或Web API?

在搜索了我应该使用的一整天后,我不确定哪种选择最适合我的需求,所以我希望有经验的人可以帮助我。 我有一个winforms应用程序( c# )和一个ASP.NET MVC 4 Web应用程序( c# )。 我想连接这些,目标是从我在MVC 4项目中使用的数据库发送和接收数据,但是从windows窗体应用程序中。 我从Windows窗体应用程序发送到数据库的数据然后由MVC 4 Web应用程序使用。 我是Web服务/ Web Api的新手,所以我无法真正决定哪种选择最好。 任何帮助将非常感激..

使用语句中的HttpClient导致任务被取消

我为我的api调用创建了一个FileResult : IHttpActionResult webapi返回类型。 FileResult从另一个URL下载文件,然后将流返回给客户端。 最初我的代码有一个如下所示的using语句: public async Task ExecuteAsync(CancellationToken cancellationToken) { try { HttpResponseMessage response; using (var httpClient = new HttpClient()) { response = new HttpResponseMessage(HttpStatusCode.OK) { Content = new System.Net.Http.StreamContent( await httpClient.GetStreamAsync(this.filePath)) }; } return response; } catch (WebException exception) {…} } 但是,这会间歇性地导致TaskCanceledException 。 我知道如果在异步调用完成之前处理了HttpClient,Task的状态将变为取消。 但是因为我使用了await : Content = new System.Net.Http.StreamContent(await httpClient.GetStreamAsync(this.filePath)) ,它应该阻止HttpClient在任务完成过程中被处理掉。 […]

WebAPI路由模板中的通配符

我已经设置了一个路由模板: config.Routes.MapHttpRoute( name: “DefaultApi”, routeTemplate: “api/{controller}/{id}/{*wildcard}”, defaults: new { id = RouteParameter.Optional } ); 控制器的动作签名: public IEnumerable Get(Int64 id,string abc) 我尝试将其与URL http://mymachine.com/api/Individuals/1?abc=4匹配,但它给了我一个例外 {“$ id”:“1”,“Message”:“发生错误。”,“ExceptionMessage”:“对象引用未设置为对象的实例。”,“ExceptionType”:“System.NullReferenceException”, “StackTrace”:“在System.Web.Http.ValueProviders.Providers.RouteDataValueProvider.d__4.MoveNext()\ r \ n 奇怪的是, http: //mymachine.com/api/Individuals?id = 1& abc = 4确实与控制器,动作和参数相匹配。 我认为“api / {controller} / {id} / {* wildcard}”的“ {id }”将起作用。 为什么?

带有自定义身份validation的ASP.NET Web API

我正在寻找帮助创建具有自定义用户名/密码身份validation的Web API。 我有自己的数据库来validation用户,我不想使用Windows身份validation。 我希望能够使用[Authorize]等属性来装饰我的web api调用,这样在没有登录的情况下进行的调用将失败。 我不想将凭证作为参数传递给每个方法。 该API主要由使用Xamarin PCL的移动设备使用。 Web API必须使用SSL。 这似乎是一个简单的设置,但我的谷歌搜索没有透露任何超级有用的命中。 理想情况下,我想要一个Login控制器,它授权用户并允许后续的方法调用。 有人可以提供基本的例子或一些好的阅读材料吗?

将身份validation添加到ASP.NET WebApi 2.2

我创建了一个WebApi 2.2项目(来自一个空的新ASP.NET项目)来certificate一些实现概念,我现在想要为它添加身份validation。 我注意到在新的WebApi应用程序上添加身份validation的唯一方法是使用其中一个(VS 2013,在我的情况下)模板。 是否有一种确定的方法可以将身份validation添加到现有的WebApi 2.2应用程序中? 我只想使用持票人代币,如果这对我可能收到的任何答案产生影响。

创建和下载zip存档为HttpContent时的内存使用情况

我有一个web api GET方法,它返回一个zip文件供下载。 这是创建zip存档的代码: var resultStream = new MemoryStream(); using (var zipArchive = new ZipArchive(resultStream, ZipArchiveMode.Create, leaveOpen: true)) { foreach (var file in files) { zipArchive.CreateEntryFromFile(file.Path, file.Name, CompressionLevel.Optimal); } } 以下是响应如何填充: var response = new HttpResponseMessage(HttpStatusCode.OK); response.Content = new ByteArrayContent(resultStream.ToArray()); response.Content.Headers.ContentType = new MediaTypeHeaderValue(“application/zip”); response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue(“attachment”); response.Content.Headers.ContentDisposition.FileName = “export_” + DateTime.Now.ToString(“dd-MM-yyyy_HH-mm-ss”) + “.zip”; […]

反序列化为double时,JsonConvert会抛出一个“非有效整数”exception

当我尝试从JSON字符串反序列化为对象时,我得到一个exception。 Input string ‘46.605’ is not a valid integer. Path ‘LatitudeCenter’ 这真的很奇怪,因为JsonConvert尝试将属性反序列化为整数,但它实际上是一个double而不是整数 。 我已经检查了我的Web API项目。 我的类中的属性是web项目中的double和same。 我在web asp项目中使用的代码: using (var client = new HttpClient()) { client.BaseAddress = new Uri(“myWebApiHostedUrl”); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(“application/json”)); // Get the response HttpResponseMessage response = await client.GetAsync(“api/NewMap/?SouthLatitude=46.600&WestLongitude=7.085&NorthLatitude=46.610&EastLongitude=7.095&Width=900&Height=900&isVoxelMap=true”); string jsonData = response.Content.ReadAsStringAsync().Result; //Exception here NewMap dataMewMap = JsonConvert.DeserializeObject(jsonData, new JsonSerializerSettings() { Culture […]

当代码的所有部分都不是异步时,异步Web服务有什么好处

我想知道如果不是代码的所有部分都是异步的,那么使用异步http请求会带来多少好处。 让我们考虑一下场景:1)异步http请求阻塞同步数据库调用,以及2)同步等待异步数据库调用的http请求。 1)Web Api支持异步操作方法,但是如果我在处理请求时执行同步数据库调用,那么线程会阻塞调用,并且我不会获得async可以给我的更好的线程经济性的好处或什么? 2)如果我有一个等待异步数据库调用的同步ServiceStack服务调用,那么会发生什么? 我假设一个线程被保留用于处理整个同步http请求,当这个线程等待异步调用时,它仍然保留给Web请求或者什么? 基本上我的问题可归结为:如果不是所有的IO调用都是异步的话,有没有理由使用异步?

在Asp.Net MVC Web Api中测试Controller时,ModelState.IsValid始终为true

我试图使这个工作,并进行了许多google / stackoverflow搜索,没有运气。 我有一个简单的模型: public class MovieModel { public string Id { get; set; } [Required] [StringLength(100)] public string Name { get; set; } } 控制器中的方法: // POST: api/Movies public IHttpActionResult Post([FromBody]MovieModel movieModel) { if (ModelState.IsValid) { //Code } } 一个测试方法(是一个集成测试,但在unit testing中会发生同样的情况): [TestMethod] public void MoviesController_Post_Without_Name() { // Arrange var model = new MovieModel(); model.Name […]