Tag: asp.net web api

如何将HttpResponseMessage内容作为文本阅读

我正在使用HttpResponseMessage类作为AJAX调用的响应,该调用从服务返回JSON数据。 当我从服务返回AJAX调用后暂停执行时,我看到这个类包含一个类型为System.Net.Http.StreamContent的Content属性。 如果我在浏览器中检查,我看到网络调用成功,JSON数据作为响应。 我只是想知道为什么我在Visual Studio中看不到返回的JSON文本? 我搜遍了整个System.Net.Http.StreamContent对象,看不到任何数据。 public async Task Send(HttpRequestMessage request) { var response = await this.HttpClient.SendAsync(request); return response; }

ASP.NET Web API – 没有“MediaTypeFormatter”可用于读取“Int32”类型的对象

我不完全确定这里发生了什么。 我可能在某个地方弄乱了,但我不知道是什么。 我的API控制器方法如下所示: public HttpResponseMessage Put(int id) 我也试过一个字符串也有同样的错误。 有任何想法吗? 谢谢。 编辑:要清楚 – id是路由参数。 请求的主体是JSON。 如果我删除route参数,该方法将正常运行。

Web API中的MVC-6与MVC-5 BearerAuthentication

我有一个Web API项目,使用UseJwtBearerAuthentication到我的身份服务器。 启动时的配置方法如下所示: public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseJwtBearerAuthentication(options => { options.AutomaticAuthentication = true; options.Authority = “http://localhost:54540/”; options.Audience = “http://localhost:54540/”; }); // Configure the HTTP request pipeline. app.UseStaticFiles(); // Add MVC to the request pipeline. app.UseMvc(); } 这是有效的,我想在MVC5项目中做同样的事情。 我试着这样做: Web api: public class SecuredController : ApiController { [HttpGet] [Authorize] public IEnumerable<Tuple> Get() { […]

从ASMX调用基于任务的方法

我有一个最近的经验,我想分享这可能对任何必须维护必须更新以调用基于任务的方法的旧ASMX Web服务的人有所帮助。 我最近一直在更新一个ASP.NET 2.0项目,其中包括一个传统的ASMX Web服务到ASP.NET 4.5。 作为更新的一部分,我介绍了一个Web API接口,以允许应用程序的高级自动化。 ASMX服务必须与新API共存才能实现向后兼容。 该应用程序的一个function是能够代表呼叫者从外部数据源(工业工厂历史记录,定制Web服务等)请求数据。 作为升级的一部分,我重新编写了数据访问层的大部分内容,以使用基于任务的异步模式异步请求数据。 鉴于在ASMX服务中不可能使用aync / await,我修改了ASMX方法以对异步方法进行阻塞调用,即调用基于任务的方法,然后使用Task.WaitAll阻塞线程,直到任务完成。 当调用任何正在调用返回任务或任务的方法的ASMX方法时,我发现请求总是超时。 当我逐步完成代码时,我可以看到异步代码已成功执行,但对Task.WaitAll的调用从未检测到任务已完成。 这引起了一个令人头疼的问题:ASMX服务如何能够与新的异步数据访问function共存?

web api中的内存缓存

我在我的web api中寻找缓存 ,我可以使用一个api方法的输出(在12小时内更改一次)进行后续调用,然后我在SO上找到了这个解决方案 ,但是我很难理解并使用下面的代码 private IEnumerable GetFromCache(string key, Func<IEnumerable> valueFactory) where TEntity : class { ObjectCache cache = MemoryCache.Default; var newValue = new Lazy<IEnumerable>(valueFactory); CacheItemPolicy policy = new CacheItemPolicy { AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(30) }; //The line below returns existing item or adds the new value if it doesn’t exist var value = cache.AddOrGetExisting(key, newValue, policy) […]

将Web API Controller添加到不同的程序集

如何将Web Api Controller添加到其他程序集? 我想将Web API控制器与我的MVC应用程序分开。

根据json值路由到不同的操作

我想根据特定json参数的值将请求路由到不同的操作。 例如,给定以下json数据: { type: “type1”, type1data: “type1value” } 和 { type: “type2”, type2data: “type2value” } 我希望能在我的ApiController上有两个不同的动作: void CreateType1(string type1data) { // … } void CreateType2(string type2data) { //… } 这样的事情怎么办? 更新: 如果可能的话,我想要相同的url。 像/objects/create类的东西。

FileLoadException未被用户代码处理

我正在为我的MVC-4应用程序设置API,当我在Globals.asax.cs中取消注释这一行时: WebApiConfig.Register(GlobalConfiguration.Configuration); 当我重新启动项目时收到此exception: An exception of type ‘System.IO.FileLoadException’ occurred in mscorlib.dll but was not handled in user code Additional information: Could not load file or assembly ‘Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed’ or one of its dependencies. The located assembly’s manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040) 我该怎么办? 更新1(截图) 据我所知,JSON.Net看起来已正确安装。 更新2 当在Globals.Asax中注释掉API路由时,JSON.Net实际上似乎有效。 […]

如何在NEST2中更新Elasticsearch文档

我已将我的代码移植到NEST 2.0和Elasticsearch 2.0 我需要找到一种方法来更新已存储到ES2中的文档 我正在使用部分对象技术 : elastic.Update(u => u .Index(myIndexName) .Id(id) .Doc( new myPartialDocumentType() { // set the fields to update here }) .Refresh()); 如何使用NEST2做同样的事情?

使用自定义DataAnnotationsModelValidatorProvider进行服务器端validation

我已经设置了一个自定义提供程序,允许从数据存储而不是静态代码中设置validation属性。 在我的.NET MVC 4项目中使用客户端validation很好用,但我无法让服务器端validation工作。 CustomModelValidatorProvider .cs: public class CustomModelValidatorProvider:DataAnnotationsModelValidatorProvider { protected override IEnumerable GetValidators(ModelMetadata元数据,ControllerContext上下文,IEnumerable属性) { //在这里设置数据存储区的属性 return base.GetValidators(元数据,上下文,属性); } } 在我的Global.asax.cs中,我有: protected void Application_Start() { ModelValidatorProviders.Providers.Clear(); ModelValidatorProviders.Providers.Add(new CustomModelValidatorProvider()); } 在Web API方法中,我有: var validationResultList = new List(); bool valid = Validator.TryValidateObject(myModelObject,new ValidationContext(myModelObject,null,null),validationResultList,true); 在这里,有效总是如此。 即使Jquery客户端validation显示错误。 在服务器端,我的自定义提供程序不用于应用数据注释。 当我在GetValidators()中设置断点时,在创建View时调用它并正确显示客户端validation器,但是当模型绑定到控制器时不会再次调用它。 我错过了一步吗? 任何帮助是极大的赞赏! UPDATE 当对象发布到Controller时,自定义validation器可以正常工作,但在发布到ApiController时不会被触发。