Questions tagged «asp.net-web-api»

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

8
将内容放在HttpResponseMessage对象中?
几个月前,Microsoft决定更改HttpResponseMessage类。以前,您可以简单地将数据类型传递到构造函数中,然后返回带有该数据的消息,但不再返回。 现在,您需要使用Content属性来设置消息的内容。问题是它的类型为HttpContent,而且我似乎找不到找到将字符串转换为HttpContent的方法。 有谁知道如何处理这个问题?非常感谢。

1
如何全局记录C#MVC4 WebAPI应用程序的所有异常?
背景 我正在为客户端开发API服务层,并且已要求我全局捕获和记录所有错误。 因此,虽然可以通过使用ELMAH或将类似的内容添加到来轻松处理未知端点(或动作)之类的内容Global.asax: protected void Application_Error() { Exception unhandledException = Server.GetLastError(); //do more stuff } 。。与路由无关的.unhanded错误不会记录。例如: public class ReportController : ApiController { public int test() { var foo = Convert.ToInt32("a");//Will throw error but isn't logged!! return foo; } } 我还尝试[HandleError]通过注册此过滤器来全局设置属性: filters.Add(new HandleErrorAttribute()); 但这还不能记录所有错误。 问题/疑问 如何拦截类似上述调用所生成的错误/test,以便我可以记录它们?似乎这个答案应该很明显,但是到目前为止,我已经尝试了所有我能想到的。 理想情况下,我想在错误日志中添加一些内容,例如发出请求的用户的IP地址,日期,时间等。我还希望能够在遇到错误时自动向支持人员发送电子邮件。只要发生这些错误,我就可以拦截所有这些事情! 解决! 多亏达林·迪米特洛夫(Darin Dimitrov)接受了我的回答,我才明白这一点。 WebAPI …


11
防止在Web API中序列化属性
我正在使用MVC 4 Web API和ASP.NET Web Forms 4.0来构建Rest API。运作良好: [HttpGet] public HttpResponseMessage Me(string hash) { HttpResponseMessage httpResponseMessage; List<Something> somethings = ... httpResponseMessage = Request.CreateResponse(HttpStatusCode.OK, new { result = true, somethings = somethings }); return httpResponseMessage; } 现在,我需要防止某些属性被序列化。我知道我可以在列表上使用一些LINQ并仅获取我需要的属性,通常这是一个好方法,但是在当前情况下,something对象太复杂了,并且我需要使用不同方法的一组不同属性,因此易于在运行时标记每个要忽略的属性。 有没有办法做到这一点?

6
如何在ASP.NET WebAPI中返回文件(FileContentResult)
在常规MVC控制器中,我们可以使用来输出pdf FileContentResult。 public FileContentResult Test(TestViewModel vm) { var stream = new MemoryStream(); //... add content to the stream. return File(stream.GetBuffer(), "application/pdf", "test.pdf"); } 但是如何将其更改为ApiController? [HttpPost] public IHttpActionResult Test(TestViewModel vm) { //... return Ok(pdfOutput); } 这是我尝试过的方法,但似乎不起作用。 [HttpGet] public IHttpActionResult Test() { var stream = new MemoryStream(); //... var content = new …

9
抛出HttpResponseException或返回Request.CreateErrorResponse吗?
在阅读了ASP.NET Web API中的异常处理文章之后,我对何时引发异常与返回错误响应感到困惑。我还想知道当您的方法返回特定于域的模型而不是HttpResponseMessage... 时是否可以修改响应... 因此,回顾一下我的问题,后面是一些带有案例编号的代码: 问题 有关案例1的问题 我是否应该始终使用HttpResponseMessage而不是具体的域模型,以便可以自定义消息? 如果要返回具体域模型,可以自定义消息吗? 有关案例#2、3、4的问题 我应该抛出异常还是返回错误响应?如果答案是“视情况而定”,那么您能否举例说明何时使用另一种方法。 HttpResponseExceptionvs与thing有Request.CreateErrorResponse什么区别?输出到客户端似乎相同... 我是否应该总是使用HttpError“包装”错误中的响应消息(是否抛出异常或返回错误响应)? 案例样本 // CASE #1 public Customer Get(string id) { var customer = _customerService.GetById(id); if (customer == null) { var notFoundResponse = new HttpResponseMessage(HttpStatusCode.NotFound); throw new HttpResponseException(notFoundResponse); } //var response = Request.CreateResponse(HttpStatusCode.OK, customer); //response.Content.Headers.Expires = new DateTimeOffset(DateTime.Now.AddSeconds(300)); return …

9
WebApi的{“ message”:“发生错误”}}在IIS7上,而不是在IIS Express中
我正在使用ASP.NET MVC 4 WebApi,并在IIS Express的本地计算机上运行它带来了很多乐趣。我已经将IIS Express配置为也可以为远程计算机提供服务,因此我公司中的其他公司都将我的计算机用作我们的Web服务器。 在确定这不是一个最佳解决方案之后,我们决定在安装.NET 4.5之后将WebApi放置在远程服务器上。当我使用提琴手并将POST发送到本地计算机上的控制器时,它会返回正确的响应,但是当我将域更改为运行IIS7的网络服务器时,相同的POST将返回一个神秘的信息。 {“消息”:“发生了错误”} 信息。有人知道会发生什么吗?

16
ASP.NET Web API中具有多个GET方法的单个控制器
在Web API中,我有一类类似的结构: public class SomeController : ApiController { [WebGet(UriTemplate = "{itemSource}/Items")] public SomeValue GetItems(CustomParam parameter) { ... } [WebGet(UriTemplate = "{itemSource}/Items/{parent}")] public SomeValue GetChildItems(CustomParam parameter, SomeObject parent) { ... } } 由于我们可以映射各个方法,因此在正确的位置获得正确的请求非常简单。对于只有一个GET方法但也有一个Object参数的类似类,我成功使用IActionValueBinder。但是,在上述情况下,出现以下错误: Multiple actions were found that match the request: SomeValue GetItems(CustomParam parameter) on type SomeType SomeValue GetChildItems(CustomParam parameter, SomeObject …

7
如何使HttpClient与请求一起传递凭据?
我有一个与Windows服务对话的Web应用程序(托管在IIS中)。Windows服务使用的是ASP.Net MVC Web API(自托管),因此可以使用JSON与HTTP进行通信。Web应用程序被配置为进行模拟,其想法是向Web应用程序发出请求的用户应该是Web应用程序用于向服务发出请求的用户。结构如下: (以红色突出显示的用户是以下示例中所指的用户。) 该Web应用程序使用以下命令向Windows服务发出请求HttpClient: var httpClient = new HttpClient(new HttpClientHandler() { UseDefaultCredentials = true }); httpClient.GetStringAsync("http://localhost/some/endpoint/"); 这会向Windows服务发出请求,但不会正确传递凭据(服务将用户报告为IIS APPPOOL\ASP.NET 4.0)。这不是我想要发生的事情。 如果我更改上面的代码以使用 WebClient,则正确传递了用户的凭据: WebClient c = new WebClient { UseDefaultCredentials = true }; c.DownloadStringAsync(new Uri("http://localhost/some/endpoint/")); 使用上面的代码,服务将用户报告为向Web应用程序发出请求的用户。 我的HttpClient实现有什么问题,导致它无法正确传递凭据(或者是的错误HttpClient)? 我要使用的原因HttpClient是它具有一个与s兼容的异步API Task,而WebClient的asyc API需要通过事件进行处理。

7
在WebAPI客户端中,每个调用创建一个新的HttpClient的开销是多少?
HttpClientWebAPI客户端的生存期应该是什么? 拥有HttpClient多个通话的实例更好吗? 创建和处理HttpClient每个请求的开销是多少,如以下示例所示(摘自http://www.asp.net/web-api/overview/web-api-clients/calling-a-web-api-from- a-net-client): using (var client = new HttpClient()) { client.BaseAddress = new Uri("http://localhost:9000/"); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); // New code: HttpResponseMessage response = await client.GetAsync("api/products/1"); if (response.IsSuccessStatusCode) { Product product = await response.Content.ReadAsAsync<Product>(); Console.WriteLine("{0}\t${1}\t{2}", product.Name, product.Price, product.Category); } }

4
ASP.NET Core中基于令牌的身份验证
我正在使用ASP.NET Core应用程序。我正在尝试实施基于令牌的身份验证,但无法弄清楚如何为我的案例使用新的安全系统。我查看了一些示例,但是它们并没有太大帮助,它们使用cookie身份验证或外部身份验证(GitHub,Microsoft,Twitter)。 我的情况是:angularjs应用程序应请求/token传递用户名和密码的url。WebApi应该授权用户并返回access_token,它将在以下请求中由angularjs应用程序使用。 我找到了一篇很棒的文章,内容涉及在ASP.NET的当前版本中完全实现所需的内容- 使用ASP.NET Web API 2,Owin和Identity的基于令牌的身份验证。但是对我来说,如何在ASP.NET Core中执行相同的操作并不明显。 我的问题是:如何配置ASP.NET Core WebApi应用程序以与基于令牌的身份验证一起使用?

30
找不到CodeDom提供程序类型“ Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider”
这是一个使用VS2015的WebApi项目。 复制步骤: 创建一个空的WebApi项目 将构建输出路径从“ bin \”更改为“ bin \ Debug \” 跑 在将“生成输出”路径从“ bin \”更改为“ bin \ Debug \”之前,一切工作正常,实际上,除“ bin \”以外的任何输出路径均无效。 另外一点是,只要我将构建保留在“ bin \”中,就可以在任何地方都具有另一个输出路径。 请帮助提供解决方案以解决此问题。我想这会在实际部署上带来问题。

3
将Http标头添加到HttpClient
所有: 在将请求发送到Web服务之前,我需要将HTTP标头添加到HttpClient中。我该如何针对单个请求(而不是对所有将来的请求使用HttpClient)?我不确定这是否可能。 var client = new HttpClient(); var task = client.GetAsync("http://www.someURI.com") .ContinueWith((taskwithmsg) => { var response = taskwithmsg.Result; var jsonTask = response.Content.ReadAsAsync<JsonObject>(); jsonTask.Wait(); var jsonObject = jsonTask.Result; }); task.Wait();


13
使用HttpClient进行Https调用
我一直在HttpClient使用C#进行WebApi调用。与相比,看起来整洁快捷WebClient。但是我在Https打电话时被困住了。 如何进行以下代码进行Https调用? HttpClient httpClient = new HttpClient(); httpClient.BaseAddress = new Uri("https://foobar.com/"); httpClient.DefaultRequestHeaders.Accept.Clear(); httpClient.DefaultRequestHeaders.Accept.Add( new MediaTypeWithQualityHeaderValue("application/xml")); var task = httpClient.PostAsXmlAsync<DeviceRequest>( "api/SaveData", request); 编辑1: 上面的代码可以很好地进行http调用。但是,当我将方案更改为https时,它不起作用。这是获得的错误: 基础连接已关闭:无法为SSL / TLS安全通道建立信任关系。 编辑2: 将方案更改为https是:第一步。 我如何提供证书和公钥/私钥以及C#请求。

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.