Questions tagged «asp.net-web-api»

ASP.NET Web API是用于为客户端(如浏览器和移动设备)构建HTTP服务的框架。它基于Microsoft .NET Framework,是构建RESTful服务的理想选择。

6
在POST中将JSON发送到Web API服务时出错
我正在使用Web API创建Web服务。我实施了一个简单的课程 public class ActivityResult { public String code; public int indexValue; public int primaryCodeReference; } 然后我在控制器内部实现了 [HttpPost] public HttpResponseMessage Post(ActivityResult ar) { return new HttpResponseMessage(HttpStatusCode.OK); } 但是,当我调用POST中传递的API时,文件为json: {"code":"XXX-542","indexValue":"3","primaryCodeReference":"7"} 我收到以下错误消息: { "Message": "The request entity's media type 'text/plain' is not supported for this resource.", "ExceptionMessage": "No MediaTypeFormatter is available to …

3
Web Api属性路由中的可选参数
我想处理以下API调用的POST: /v1/location/deviceid/appid 附加参数来自后机构。 这一切对我来说都很好。现在,我通过允许将“ deviceid”和/或“ appid”和/或BodyData设置为null来扩展代码: /v1/location/deviceid /v1/location/appid /v1/location/ 这3个URL应该以相同的路径响应。 我的第一种方法(需要BodyData): [Route("v1/location/{deviceid}/{appid}", Name = "AddNewLocation")] public location_fromuser Post(string deviceid = null, string appid = null, [FromBody] location_fromuser BodyData) { return repository.AddNewLocation(deviceid, appid, BodyData); } 这不起作用,并返回编译错误: “可选参数必须在末尾” 下次尝试: [Route("v1/location/{deviceid}/{appid}", Name = "AddNewLocation")] public location_fromuser Post([FromBody] location_fromuser BodyData, string deviceid = null, …

4
为什么等待后HttpContext.Current为null?
我有以下测试WebAPI代码,我不在生产中使用WebAPI,但由于进行了有关此问题的讨论,所以进行了此操作:WebAPI异步问题 无论如何,这是令人讨厌的WebAPI方法: public async Task<string> Get(int id) { var x = HttpContext.Current; if (x == null) { // not thrown throw new ArgumentException("HttpContext.Current is null"); } await Task.Run(() => { Task.Delay(500); id = 3; }); x = HttpContext.Current; if (x == null) { // thrown throw new ArgumentException("HttpContext.Current is null"); …

8
单独项目中的MVC解决方案中的Web API
我正在创建一个新的MVC4项目,研究使我相信现在通过Web API框架而不是控制器操作,可以更好地实现从javascript到服务器端的通信。我的理解对吗? 我假设我可以在Web API和MVC控制器之间共享我的所有属性,因此从表面上看,这对我来说似乎不是一个巨大的变化。 设置应用程序时,我喜欢将组件拆分为多个项目。我的计划是拥有一个MVC项目和一个Web API项目。但是我遇到了问题。例如,我最终得到了2个这样的应用程序,分别设置了路由等。 所以我的问题是,在MVC应用程序中,Web API框架应该放在同一个项目中,还是应该将Web API分成自己的项目并解决问题?

21
405方法不允许Web API
此错误非常常见,我尝试了所有解决方案,但没有一个起作用。我已在控制面板中禁用了WebDAV发布并将其添加到我的Web配置文件中: <handlers> <remove name="WebDAV"/> </handlers> <modules runAllManagedModulesForAllRequests="true"> <remove name="WebDAVModule"/> </modules> 该错误仍然存​​在。这是控制器: static readonly IProductRepository repository = new ProductRepository(); public Product Put(Product p) { return repository.Add(p); } 方法实现: public Product Add(Product item) { if (item == null) { throw new ArgumentNullException("item"); } item.Id = _nextId++; products.Add(item); return item; } 这是引发异常的地方: client.BaseAddress …

21
实体框架核心:在上一个操作完成之前,在此上下文上启动了第二个操作
我正在使用Entity Framework Core进行ASP.Net Core 2.0项目 <PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.0.1" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.0.0" PrivateAssets="All" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.0.0"/> 在我的一种列表方法中,我收到此错误: InvalidOperationException: A second operation started on this context before a previous operation completed. Any instance members are not guaranteed to be thread safe. Microsoft.EntityFrameworkCore.Internal.ConcurrencyDetector.EnterCriticalSection() 这是我的方法: [HttpGet("{currentPage}/{pageSize}/")] [HttpGet("{currentPage}/{pageSize}/{search}")] public ListResponseVM<ClientVM> GetClients([FromRoute] int currentPage, …

8
WCF数据服务(OData)与ASP.NET Web API
我正在设计一个分布式应用程序,它将由RESTful服务和各种客户端(Silverlight,iOS,Windows Phone 7等)组成。现在,我正在确定应该使用哪种技术来实现我的服务,WCF数据服务(OData)或ASP.NET MVC 4随附的新ASP.NET Web API。 我在线上观看了一些演示,现在我倾向于WCF数据服务,这主要是因为URI内置的过滤机制和本机超媒体功能。我唯一看到的缺点是Atom Pub规范相对于POX的冗长。 在做出决定之前,我应该对这两种技术有什么了解吗?为什么有人会选择WCF数据服务上的ASP.NET Web API?


15
无法序列化Web API中的响应
我正在使用ASP.NET MVC Web API,但遇到此错误: “ ObjectContent`1”类型未能序列化内容类型“ application / xml”的响应主体;charset = utf-8'。 我的控制器是: public Employee GetEmployees() { Employee employees = db.Employees.First(); return employees; } 为什么我收到此错误?

4
.NET WebAPI序列化k_BackingField Nastiness
当我序列化以下内容时: [Serializable] public class Error { public string Status { get; set; } public string Message { get; set; } public string ErrorReferenceCode { get; set; } public List<FriendlyError> Errors { get; set; } } 我得到这个令人作呕的烂摊子: <ErrorRootOfstring xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Printmee.Api"> <_x003C_Errors_x003E_k__BackingField> An exception has occurred. Please contact printmee support </_x003C_Errors_x003E_k__BackingField> <_x003C_LookupCode_x003E_k__BackingField>988232ec-6bc9-48f3-8116-7ff7c71302dd</_x003C_LookupCode_x003E_k__BackingField> …


6
从Asp.net WEBAPI显式返回JSON字符串?
在某些情况下,我拥有NewtonSoft JSON.NET,在控制器中,我只是从控制器中返回Jobject,一切都很好。 但是我遇到的情况是,我从另一个服务中获取了一些原始JSON,并且需要从我的webAPI中返回它。在这种情况下,我不能使用NewtonSOft,但是如果可以的话,我将根据字符串创建一个JOBJECT(这似乎是不需要的处理开销),并返回该值,那么一切都会变得很好。 但是,我想简单地返回它,但是如果我返回字符串,那么客户端会收到一个JSON包装器,并将我的上下文作为编码字符串。 如何从WebAPI控制器方法显式返回JSON?

10
如何传递datetime参数?
如何将UTC日期传递给Web API? 传递2010-01-01工作正常,但是当传递UTC日期(例如2014-12-31T22:00:00.000Z(带有时间成分))时,会收到HTTP 404响应。所以 http://domain/api/controller/action/2012-12-31T22:00:00.000Z 产生404错误响应,而 http://domain/api/controller/action/2012-12-31 工作正常。 然后如何将UTC日期传递给Web API-或至少指定日期和时间?

11
无法使用Unity将依赖项注入ASP.NET Web API控制器
使用IoC容器将依赖项注入ASP.NET WebAPI控制器中,是否有人能成功运行?我似乎无法使其正常工作。 这就是我现在正在做的。 在我的global.ascx.cs: public static void RegisterRoutes(RouteCollection routes) { // code intentionally omitted } protected void Application_Start() { AreaRegistration.RegisterAllAreas(); RegisterGlobalFilters(GlobalFilters.Filters); RegisterRoutes(RouteTable.Routes); IUnityContainer container = BuildUnityContainer(); System.Web.Http.GlobalConfiguration.Configuration.ServiceResolver.SetResolver( t => { try { return container.Resolve(t); } catch (ResolutionFailedException) { return null; } }, t => { try { return container.ResolveAll(t); } …

13
使用ASP.NET(MVC 4)Web API OData预发行版本无法加载文件或程序集System.Net.Http,Version = 4.0.0.0
问题 安装Microsoft ASP.NET Web API OData软件包5.0.0-rc1预发行版后,出现以下异常: 无法加载文件或程序集'System.Web.Http,版本= 4.0.0.0,区域性=中性,PublicKeyToken = 31bf3856ad364e35'或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(来自HRESULT的异常:0x80131040) 我的MVC 4项目是全新的,而且规模很小,没有什么花哨的地方。我的目标是.NET Framework 4.5 我需要这个nuget软件包来使用Delta类实现PATCH (当我使用4.0.0.0版的软件包时,Delta类无法正常工作)。 我该如何解决? 我的System.Web.Http版本 在GAC中,我具有System.Web.Http的版本5.0.0.0 gacutil -l System.Web.Http全局程序集缓存包含以下程序集:System.Web.Http,版本= 5.0.0.0,文化=中性,PublicKeyToken = 31bf3856ad364e35,processorArchitecture = MSIL 在Visual Studio中,当我浏览程序集时,给定的System.Web.Http版本为4.0.0.0(为什么?) 在我的项目中,对System.Web.Http的引用 拥有版本5.0.0.0 指向软件包的\ lib \ net45 \文件夹 具有CopyLocal = true 我尝试过的事情 我试图将重定向v 4.0.0.0绑定到Web.config中的5.0.0.0 <dependentAssembly> <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="4.0.0.0-4.0.0.0" …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.