Tag: asp.net web api

使用AttributeRouting在WebAPI中指定默认控制器/操作路由

如何设置使用AttributeRouting而不是WebAPI使用的默认RouteConfiguration时使用的默认控制器。 即删除注释的代码部分,因为使用AttribteRouting时这是多余的 public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute(“{resource}.axd/{*pathInfo}”); //routes.MapRoute( // name: “Default”, // url: “{controller}/{action}/{id}”, // defaults: new { controller = “Home”, action = “Index”, id = UrlParameter.Optional } //); } } 如果我评论上面的部分并尝试运行webapi应用程序,我会收到以下错误,因为没有定义默认的Home控制器/操作。 HTTP错误403.14 – 禁止Web服务器配置为不列出此目录的内容。 如何通过归属控制器/操作的属性路由指定路由? 编辑:代码示例: public class HomeController : Controller { [GET(“”)] public ActionResult Index() { return […]

WEB API – 在控制器或操作级别授权(无身份validation)

我有一个没有身份validation的现有API。 它是一个公共Web API,几个客户通过发出简单的请求来使用它。 现在,需要授权访问某种方法。 有没有办法做到这一点,保持其他控制器和相应的方法为已经使用此Web API的客户端“打开”? 如何识别请求是否有权访问此“受保护”方法?

操作未在分配的00:01:00超时内完成

我正在使用代码片段将消息发送到服务总线主题。 try { // sb is instance of ServiceBusConfig.GetServiceBusForChannel await sb.SendAsync(message); } catch (Exception ex) { this.logger.LogError( “chanel”, “An error occurred while sending a notification: ” + ex.Message, ex); throw; } 和实施是 public async Task SendAsync(BrokeredMessage message) { if (this.topicClient == null) { this.topicClient = TopicClient.CreateFromConnectionString(this.primaryConnectionString, this.topicPath); this.topicClient.RetryPolicy = this.retryPolicy; } await this.topicClient.SendAsync(message); } 错误:- […]

为什么auth中间件声明的顺序在Owin Startup类中很重要?

我读了一些关于在使用web api时在owin管道中设置身份validation的示例( 1,2,3,4) ,并且示例将身份validation中间件声明为Configuration方法中的第一个中间件,但没有告诉它为什么需要第一。 在这个问题中,作者在认证中间件之前附加了webapi中间件,然后认证无法正常工作。 当auther将它移动到方法的顶部时,一切都按预期工作。 有谁知道为什么需要将身份validation中间件添加为启动配置方法中的第一个中间件?

在WebAPI操作方法中抛出HttpResponseException,返回空200响应

我正在尝试从我的应用程序返回适当的Http代码和响应,但我正在努力。 似乎有两种方法可以返回特定的http响应。 我想要处理的方法是抛出一个HttpResponseException : public Information Get(int apiKey) { if (!_users.Authenticate(apiKey)) { var response = new HttpResponseMessage(); response.StatusCode = (HttpStatusCode)401; response.ReasonPhrase = “ApiKey invalid”; throw new HttpResponseException(response); } return _info.Get(); } 但是,当我这样做时,我看到的响应只是一个空的200响应! 您似乎也可以更改操作方法的签名以返回HttpResponseMessage如下所示: public HttpResponseMessage Get() { if (!_users.Authenticate(apiKey)) { return Request.CreateResponse((HttpStatusCode) 401, “ApiKey invalid”); } return Request.CreateResponse((HttpStatusCode) 200, _info.Get()); } 我真的不想这样做,如果我可以帮助它,我宁愿让我的返回类型作为我试图检索的对象,而不是每次在HttpResponseMessage包装它。 有没有理由为什么第一个方法返回一个空的200而不是401我想要它的消息?

Web Api请求在将内容复制到流时会出现“错误”。

我正在尝试实现此代码示例 ,但获取HttpRequestException – “ 将内容复制到流时出错 ”。 调用ReadAsStringAsync()方法时。 内部exception是“ 无法访问已处置的对象” 。 我正在使用Fiddler提出请求。 我不明白。 有人可以解释为什么我得到这个例外并提供解决方案吗? Web Api方法: public async Task Post(HttpRequestMessage request) { try { var jsonString = await request.Content.ReadAsStringAsync(); } catch (Exception ex) { throw; } return new HttpResponseMessage(HttpStatusCode.Created); } 提琴手(POST): User-Agent: Fiddler Host: localhost:23567 Content-Length: 18 Content-Type: application/json; charset=utf-8 Body{“Test”:1} 编辑: 我有一个线索,但需要validation。 在Web Api控制器上,我有一个ActionFilterAttribute ,在其OnActionExecuting覆盖中,有这一行: […]

你能在控制器中使用generics方法吗?

是否可以在控制器中使用通用方法? 我在谈论这样的事情: [HttpPost] public void DoSomething([FromBody] SomeGenericClass someGenericObject) { SomePrivateMethod(someGenericObject); } 我实际上已经尝试了上面的内容(虽然所有内容都有不同的名称)并且在请求正文中使用someGenericObject的实例发布到Api//DoSomething ,但它不起作用(即它没有到达控制器)。 我猜测Web API路由无法解析generics方法,因为它们可能导致下面不同类型的不同方法。 但这就是我的想法。 那么,是否可以在控制器中使用通用方法? 如果有,怎么样? 如果没有,为什么?

使用带有备用内容类型的c#web api

我是web api的新手,我需要为客户端创建一个服务器。 我无法控制客户端 – 无法改变一件事。 客户端在POST主体中发送html封装的json请求。 但是,内容类型可能会有所不同。 我需要做什么才能让我的ApiController处理不同的内容类型?

webapi2中DataMember和JsonProperty之间的区别

在webapi2中使用DataMember和JsonProperty有什么区别? 任何性能差异? 什么是首选使用? 谢谢! 安德烈亚斯

如何解析MultipartFormDataContent

我正在编写一个Web API服务,我想接受一个文件(图像)和一个包含图像关键信息的序列化对象(JSON)。 没有图像部分的问题但是当我添加包含反序列化对象的字符串内容时,我在尝试确定哪个是哪个并且相应地采取行动时遇到问题。 客户端代码如下所示: HttpClient client = new HttpClient(); MultipartFormDataContent content = new MultipartFormDataContent(); content.Add(new StreamContent(File.Open(“c:\\MyImages\\Image00.jpg”, FileMode.Open)), “image_file”, “Image00.jpg”); ImageKeys ik = new ImageKeys { ImageId = “12345”, Timestamp = DateTime.Now.ToString() }; JavaScriptSerializer js = new JavaScriptSerializer(); if (ik != null) { content.Add(new StringContent(js.Serialize(ik), Encoding.UTF8, “application/json”), “image_keys”); } string uri = “http://localhost/MyAPI/api/MyQuery/TransferFile”; var request = […]