Tag: asp.net web api

ASP.NET Web API中不允许HTTP PUT

在我的Web API项目中,我无法对我的资源执行HTTP PUT 。 我已经阅读了一些 关于 这个 问题的 类似 问题 ,并且我遵循了建议的建议。 首先,我在我的机器上完全卸载了WebDAV(Windows 7 64位),然后重新启动了我的机器。 其次,WebDAV处理程序在我的web.config被指定为已删除,并且HTTP PUT动词被指定为允许无扩展URL处理程序。 我甚至尝试添加ISAPI无扩展URL处理程序(32位和64位)并将我的应用程序从集成管道应用程序池更改为经典应用程序池。 我目前正在使用Thinktecture IdentityModel来启用跨源资源共享(CORS)支持。 为了我的理智,我已经选择了启用所有内容的核选项,以确保实际允许HTTP PUT 。 config.RegisterGlobal(httpConfig); config.ForAllResources() .ForAllOrigins() .AllowAllMethods() .AllowAllRequestHeaders(); Attribute Routing NuGet包配置为从当前程序集和ApiController任何子类型中ApiController所有路由。 config.AddRoutesFromAssembly(Assembly.GetExecutingAssembly()); config.AddRoutesFromControllersOfType(); 我的资源也正确指定了PUT属性。 [PUT(“/API/Authenticate/Link/{key}/{identifier}”)] public Boolean LinkUser(Guid key, String identifier) { … } 我在这个问题上查看的每个资源都推荐了相同的东西:卸载WebDAV,禁用WebDAV处理程序并确保正确配置了Extensionless URL处理程序。 我已经做了所有这些,但它仍然无效。 在小提琴手中,我得到以下内容: PUT https://localhost/Test/API/Authenticate/Link/Foo/Bar {“Message”:”The requested resource does not support […]

使用ADAL C#作为机密用户/守护程序服务器/服务器到服务器 – 401未经授权

参考未回答的问题: 401-使用REST API动态CRM与Azure AD进行未经授权的身份validation 和 Dynamics CRM Online 2016 – 守护程序/服务器应用程序Azure AD身份validation错误到Web Api 和 具有客户端凭据OAuth流的Dynamics CRM 2016 Online Rest API 我需要在azure云中的Web服务和Dynamics CRM Online 2016之间进行通信,而无需任何登录屏幕! 该服务将具有REST api,可触发CRM上的CRUD操作(我也将实现身份validation) 我认为这称为“机密客户端”或“守护程序服务器”或只是“服务器到服务器” 我在Azure AD中正确设置了我的服务(“委托权限=作为组织用户在线访问动态”,没有其他选项) 我在VS中创建了一个ASP.NET WEB API项目,它在Azure中创建了我的WebService,并在CRM的Azure AD中创建了“应用程序” 我的代码看起来像这样(请忽略EntityType和returnValue): public class WolfController : ApiController { private static readonly string Tenant = “xxxxx.onmicrosoft.com”; private static readonly string ClientId = “dxxx53-42xx-43bc-b14e-c1e84b62752d”; private […]

Asp.net WEB API – 如果我使用POST而不是PUT和DELETE会出现什么问题?

我刚刚开始使用Web API,虽然我发现创建方法和我需要的一些配置非常容易,但现在我遇到了一个我不知道如何解决的问题。 一些将使用我的服务的应用程序非常陈旧,不支持DELETE和PUT方法(例如j2me应用程序) 我发现通过传递这样的东西可以做某种方法模拟: _method=DELETE|PUT 但是,我不确定Web API是否能够解释这一点,此外,我不知道如何做到这一点。 出于这些原因,我正在考虑使用POST方法来处理更新和删除。 话虽如此,如果不使用所有标准方法,我可以期待什么并发症? 一如既往,任何帮助都将受到极大的赞赏 提前致谢。 PD如果有人知道如何使用_method将POST路由到DELETE()或PUT(),那就太棒了

error handling(将ex.Message发送到客户端)

我有一个ASP.NET Core 1.0 Web API应用程序,并尝试弄清楚如果我的控制器调用的函数错误输出exception消息到客户端。 我尝试了很多东西,但没有实现IActionResult 。 我不明白为什么这不是人们需要的常见事情。 如果真的没有解决方案可以有人告诉我为什么? 我确实使用HttpResponseException(HttpResponseMessage)看到了一些文档,但为了使用它,我必须安装compat shim。 在Core 1.0中有没有新的方法来做这些事情? 这是我一直在尝试垫片,但它不起作用: // GET: api/customers/{id} [HttpGet(“{id}”, Name = “GetCustomer”)] public IActionResult GetById(int id) { Customer c = _customersService.GetCustomerById(id); if (c == null) { var response = new HttpResponseMessage(HttpStatusCode.NotFound) { Content = new StringContent(“Customer doesn’t exist”, System.Text.Encoding.UTF8, “text/plain”), StatusCode = HttpStatusCode.NotFound }; throw new […]

设置默认的全局json序列化程序设置

我正在尝试在我的global.asax设置这样的全局序列化设置。 var formatter = GlobalConfiguration.Configuration.Formatters.JsonFormatter; formatter.SerializerSettings = new JsonSerializerSettings { Formatting = Formatting.Indented, TypeNameHandling = TypeNameHandling.Objects, ContractResolver = new CamelCasePropertyNamesContractResolver() }; 使用以下代码序列化对象时,不使用全局序列化程序设置? return new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent(JsonConvert.SerializeObject(page)) }; 是不是可以像这样设置全局序列化设置,还是我错过了什么?

同时阅读FromUri和FromBody

我在web api中有一个新方法 [HttpPost] public ApiResponse PushMessage( [FromUri] string x, [FromUri] string y, [FromBody] Request Request) 请求类就像 public class Request { public string Message { get; set; } public bool TestingMode { get; set; } } 我正在使用PostBody对localhost / Pusher / PushMessage进行查询?x = foo&y = bar: { Message: “foobar” , TestingMode:true } 我错过了什么吗?

JSON.NET Parser *似乎*是双重序列化我的对象

我的问题是: 这是从我的WebAPI控制器发回的响应。 “[ [ {\”id\”:\”identifier\”}, {\”name\”:\”foobar\”} ] ]” 请注意,响应包含在引号中,并且所有嵌入的引用都被转义。 这显然是个问题。 我可以为JSON.NET Serializer提供任何设置以防止这种情况发生吗? 编辑 正如pswg在他的回答中猜到的那样,我正在使用JSON.NET JsonConvert.SerializeObject(instance) 执行我的序列化。 我这样做是因为当我构建我的自定义转换器时,我将它们包含在我的WepApiConfig中的JsonConvert.DefaultSettings中(我显然认为这不是问题) 我之前尝试将我的HttpGets的返回类型交换为“我的对象类型”,响应是我对象的ToString()方法的json表示…这让我知道序列化没有通过我的转换器。 将我的HttpGets的返回类型从字符串更改为“我的对象类型”并将这些转换器直接插入到WebAPi的默认HttpConfiguration中就可以了。 config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new FooConverter()); config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new BarConverter()); 十分简单。

如何实现网页的实时数据

(这是一个Q / A风格的问题,旨在成为那些提出类似问题的人的首选资源。很多人似乎偶然发现这样做的最佳方式,因为他们不知道所有的选择许多答案都是ASP.NET特有的,但AJAX和其他技术确实在其他框架中具有等价物,例如socket.io和SignalR。) 我有一个我在ASP.NET中实现的数据表。 我希望实时或接近实时地显示页面上此基础数据的更改。 我该怎么办? 我的型号: public class BoardGame { public int Id { get; set;} public string Name { get; set;} public string Description { get; set;} public int Quantity { get; set;} public double Price { get; set;} public BoardGame() { } public BoardGame(int id, string name, string description, int quantity, double […]

使用额外参数上传Webapi formdata(到DB)

我需要上传文件发送额外的参数。 我在stackoverflow中找到了以下post: 带有额外参数的Webapi ajax formdata上传 它描述了如何使用MultipartFormDataStreamProvider并将数据保存到文件服务器。 我不需要将文件保存到服务器,而是保存到DB。 我已经使用MultipartMemoryStreamProvider处理代码,但它不使用额外的参数。 你能告诉我如何在webapi中处理额外的参数吗? 例如,如果我添加文件并测试参数: data.append(“myParameter”, “test”); 这是我的webapi处理fileupload而没有额外的参数: if (Request.Content.IsMimeMultipartContent()) { var streamProvider = new MultipartMemoryStreamProvider(); var task = Request.Content.ReadAsMultipartAsync(streamProvider).ContinueWith<IEnumerable>(t => { if (t.IsFaulted || t.IsCanceled) { throw new HttpResponseException(HttpStatusCode.InternalServerError); } _fleDataService = new FileDataBLL(); FileData fle; var fleInfo = streamProvider.Contents.Select(i => { fle = new FileData(); fle.FileName = i.Headers.ContentDisposition.FileName; […]