Tag: asp.net web api

OData只读属性

我有一个带OData V4的WebAPI 2.2应用程序。 我也在使用EF 6.1。 在我的一个实体中,我有一个计算属性: public class Person { public string FirstName { get; set; } public string LastName { get; set; } // Calculated Property – No setter public string FullName { get { return FirstName + ” ” + LastName; } } 为了向我的客户提供计算属性,我需要在OData模型中注册 public static IEdmModel GetModel() { ODataModelBuilder builder = new […]

在应用程序配置文件中找不到名为的连接字符串

我正在使用EF并从中生成.EDMX,但后来我只希望它用于自动生成类文件。 然后,我使用类文件创建实体模型,然后创建数据库上下文,然后创建存储库。 我正在调用WebApi(它在一个单独的项目中,但是在相同的解决方案中)来访问存储库以获取GET数据。 当我运行WebApi时,我收到了错误, {“在应用程序配置文件中找不到名为’DBEntities’的连接字符串。”} 但是在我的DAL中,我有一个webConfig,并且有以下条目,所以我不太确定出了什么问题, add name=”DBEntities” connectionString=”metadata=res://*/Models.DBModel.csdl|res://*/Models.DBModel.ssdl|res://*/Models.DBModel.msl;provider=System.Data.SqlClient;provider connection string="data source=MY-PC;initial catalog=DB;integrated security=True;multipleactiveresultsets=True;application name=EntityFramework"” providerName=”System.Data.EntityClient”

如何在使用OWIN的WebApi项目上启用Application Insights服务器遥测?

我们遇到了一堆问题(读取很长的响应时间)以及生产中的几个项目,并希望确切地看到服务器上发生了什么。 然后,我按照本文继续将Application Insights添加到我们的所有项目中。 问题是我们的两个WebAPI项目都没有将服务器数据发送到Azure门户,而所有其他项目(MVC 5)都是。 这是我在Azure上访问相应的Application Insights刀片时显示的内容: 我尝试在Azure VM中的Application Insights状态监视器中禁用并重新启用数据收集,在向API发出请求时重启IIS几次,但无济于事。 当我在MVC项目上启用它时,当我打开网站上的页面时,我几乎可以立即在Azure门户上看到数据。 当我看到我们的Azure VM没有为这些特定项目发送数据时,我尝试在我们的开发环境中设置相同的集合,该环境托管在我们自己的基础架构中,并且完全相同的情况重复出现,排除了可能性这与Azure VM中托管的项目有关。 我不确定是什么阻止这些项目向Azure发送数据,但通过查看工作项目与非工作项目,我认为它可能与我们的WebAPI项目使用新的OWIN这一事实有关管道虽然MVC是标准的MVC项目。 我检查了两个项目类型的web.config文件和bin文件夹,它们似乎被Insights Monitor正确修改(我可以看到添加到bin文件夹的相同新dll和添加到Web的相同http模块。配置)。 考虑到这一点,如何使用依赖于OWIN / Katana管道的WebAPI项目的Application Insights启用服务器端遥测? 在这种情况下,我该怎么做才能找出导致项目无法向Azure发送数据的确切原因?

PayPal IPN是否有任何样本

我有一个Asp.Net WEB API 2项目,我想实现一个即时支付通知(IPN)监听器控制器。 我找不到任何示例和nuget包。 我只需要承认用户使用Paypal上的标准html按钮付款。 这很简单。 所有nuget包都是创建发票或自定义按钮。 这不是我需要的 paypal上的示例适用于经典的asp.net,而不适用于MVC或WEB API MVC 我肯定有人已经这样做了,当我开始编码时,我感觉我正在重新发明轮子。 是否有任何IPN侦听器控制器示例? 至少一个PaypalIPNBindingModel绑定Paypal查询。 [Route(“IPN”)] [HttpPost] public IHttpActionResult IPN(PaypalIPNBindingModel model) { if (!ModelState.IsValid) { return BadRequest(); } return Ok(); } 编辑 到目前为止,我有以下代码 [Route(“IPN”)] [HttpPost] public void IPN(PaypalIPNBindingModel model) { if (!ModelState.IsValid) { // if you want to use the PayPal sandbox change this from […]

在WebAPI中返回null上的空json

当webApi返回空对象时,是否可以返回{}而不是null? 这样可以防止我的用户在解析响应时出错。 并使响应成为有效的Json响应? 我知道我可以手动设置它。 当null是响应时,应该返回一个空的Json对象。 但是,有没有办法自动为每个响应做到这一点?

ApiController Post中的Async和Await

我还不太清楚异步并等待.net 4.5。 到目前为止,我想我明白等待: 将函数(右侧)放在一个单独的线程上。 将执行放回当前函数的调用者 但保持当前函数的代码“hostage”的其余部分,直到等待(异步)函数完成。 如果我误解了什么,请纠正我。 所以,如果上面的描述是真的,我会遇到一个我想要异步的ApiController的Post函数: [HttpPost] public async Task Post([FromBody]MyObject obj) { myDataContext.MyObjects.InsertOnSubmit(obj); myDataContext.SubmitChanges(); await SomeReallyLongRunningTaskAsync(); // obj would now have the new Id, which I’m really after. return Request.CreateResponse(HttpStatusCode.Created, obj); } 因此,如果我正确理解这一点,Post将完成执行并将控制权返回给调用myApiController.Post(obj) 。 但是我没有HttpResponseMessage对象,因为等待保持return Request.CreateResponse(HttpStatusCode.Created, obj); “人质”。 在上面这个简单的例子中,调用会立即返回客户端(即客户端JS网站还是移动应用程序)? 如果是这样,它会是201,400,500(最好不是),其他人呢?

在asp .Net Core项目中添加wsdl web引用

我有网络服务http://www.mcommunicator.ru/m2m/m2m_api.asmx?WSDL我在Web API项目中从Visual Studio 2015连接到它时遇到问题 我已经尝试添加的“添加Web引用”没有:引用 – >添加连接服务 – > WCF服务 – 预览它通过我的地址找到1个Web服务,但是单击完成后出现错误。 我想这不是WCF服务,这就是我收到错误的原因。 但我没有看到任何其他方法来添加它。 请帮我。

在* some * WebAPI控制器上禁用SSL客户端证书?

为未来的读者编辑 :不幸的是,获得赏金的答案不起作用; 我现在无能为力。 但是请在下面阅读我自己的答案(通过测试) – 确认可以使用最少的代码更改 我们有一个完全在ASP.NET WebAPI 2.2中的Azure云服务(WebRole)(没有MVC,前端是Angular)。 我们的一些控制器/ REST端点通过SSL(客户端证书身份validation/相互身份validation)与第三方云服务通信,其余控制器/端点与HTML5 / AngularJS前端通信,也通过SSL(但更传统的服务器身份validation) SSL)。 我们没有任何非SSL端点。 我们通过云服务启动任务启用了客户端SSL,例如: IF NOT DEFINED APPCMD SET APPCMD=%SystemRoot%\system32\inetsrv\AppCmd.exe %APPCMD% unlock config /section:system.webServer/security/access 问题:该设置是站点范围的,因此即使用户访问第一页(例如https://domain.com ,返回angular.html的index.html),他们的浏览器也要求他们提供客户端SSL证书。 (下图) 如果有办法要么 将客户端SSL证书请求限制为仅与第三方云服务通信的WebAPI控制器? 要么 为我们的前端驱动webapi控制器跳过客户端SSL身份validation? 我们的服务器的web.config很复杂,但相关的代码片段如下: 并且客户端的屏幕截图访问常规WebAPI端点但尚未尝试客户端SSL身份validation(在任何浏览器,Chrome,Firefox或IE中都会发生)

web api模型绑定到接口

我正在尝试将控制器操作绑定到接口,但仍然保持默认绑定行为。 public class CoolClass : ISomeInterface { public DoSomething {get;set;} // ISomeInterface } public class DosomethingController : ApiController { public HttpResponseMessage Post(ISomeInterface model) { // do something with model which should be an instance of CoolClass } } 我的服务的消费者对CoolClass一无所知,因此让他们在他们认为通过的Json中添加“$ type”将是一个黑客。 我希望能够在服务中处理它。 如果我指定CoolClass作为动作参数,它可以正常工作。 编辑:所以我找到了我的问题的部分解决方案这里的ASP.NET Web API操作方法参数的dependency injection,但有一个后续问题。 该解决方案无法解析界面属性。 请参阅下面的示例。 IConcreteClass将被解析,但ISubtype不会。 public class SubConcreteClass : ISubtype { […]

在ASP.Net Web API中的日志记录DelegatingHandler中读取HttpRequestMessage.Content时丢失

在Controller中的Action中尝试对象时,偶尔似乎是null。 我发现它是由ReadAsStringAsync()的SendAsync()覆盖中的ReadAsStringAsync()引起的。 问题在于内容。 当我的客户端发送一个内容正文并在记录器中读取它时,它永远不会被Controller Action Invoker读取(或者可能在JsonFormatter某个地方)。 我怀疑后来对Content.ReadAsStringAsync()调用不会抛出exception但也不会返回预期的内容体(返回一些信息表明异步读取已完成)。 但是我的问题仍然存在,因为我想在一个动作中读取一个[FromBody]参数,当DelegatingHandler赢得Content.ReadStringAsync的RaceCondition时它为null。 当JsonFormatter赢得它时,我得到了对象,但这很少见(仅在服务启动时)。 这是我的DelegatingHandler代码: public class LogHandler : DelegatingHandler { protected override Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { var apiRequest = new WebApiUsageRequest(request); WriteLog(apiRequest); request.Content.ReadAsStringAsync().ContinueWith(t => { apiRequest.Content = t.Result; WriteLog(apiRequest); }); return base.SendAsync(request, cancellationToken).ContinueWith(task => { var apiResponse = new WebApiUsageResponse(task.Result); apiResponse.Content = task.Result.Content != null ? task.Result.Content.ReadAsStringAsync().Result […]