Tag: asp.net web api

检查WebAPI是否可用于C#Code Behind的简单,最佳方法

检查WebAPI是否可用的最佳方法是什么? 我想在一个简单的if()语句中检查它,是否可以保持它相对简单? 如果有更好的方法来检查。 像一个尝试/捕获。 就告诉我嘛。 谢谢 我想在我的代码隐藏的Page_Load方法中包含if语句。 因此,当API不可用时,我可以阻止该网站。 我试过这个: try { WebClient client = new WebClient(); client.UseDefaultCredentials = true; string response = client.DownloadString(baseuri + Constants.API_LEHRLING + lehrlingID); } catch (Exception ex) { string url = “AccessDenied.aspx”; Server.Transfer(url, true); } 我想从我的webapi下载一个字符串。 我的uri是自动构建的。 如果发生exception,我会引用我的错误网站。 还有其他想法吗? 这种方法有效,但不是很干净

ASP.NET WEB API没有绑定到POST上的动态对象

如果有以下Api控制器…使用StrutureMap进行DI … using System; using System.Dynamic; using System.Net; using System.Net.Http; using System.Web.Http; using IdentityService.Domain; using IdentityService.Domain.Contracts; using IdentityService.Domain.Models; namespace IdentityService.Controllers { public class AccountController : ApiController { private readonly IRepository _clientRepository; private readonly IRepository _relyingPartyRepository; private readonly IRepository _tokenRepository; public AccountController( IRepository clientRepository, IRepository relyingPartyRepository, IRepository tokenRepository) { _clientRepository = clientRepository; _relyingPartyRepository = relyingPartyRepository; _tokenRepository […]

ASP.NET Web API – camelcase中的XML

我们正在使用带有MVC 4的Web API,并且需要在驼峰的情况下提供我们的请求/响应。 我们使用以下代码为JSON做了这个: var jsonFormatter = config.Formatters.OfType().Single(); jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); 遗憾的是,相同的代码不适用于XmlMediaTypeFormatter 。 在camel案例中格式化XML的最优雅的解决方法是什么?

MVC Web API错误代码SCRIPT7002

作为参考,我使用的是Windows 10和Visual Studio 2017。 我有一个MVC web api和相应的Web应用程序,并具有登录function。 我只是尝试使用IE进行调试。 每当我使用GET调用时,我遇到以下错误:SCRIPT7002:XMLHttpRequest:网络错误0x80070005,访问被拒绝。 我已经配置并启用了CORS,所以我完全不知道为什么这不起作用。 在我的WebApiConfig文件中,我有这个: public static void Register(HttpConfiguration config) { // Web API configuration and services // Configure Web API to use only bearer token authentication. config.SuppressDefaultHostAuthentication(); config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType)); // Web API routes config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: “DefaultApi”, routeTemplate: “api/{controller}/{id}”, defaults: new { id = RouteParameter.Optional } ); config.EnableCors(); […]

ASP.NET 5,MVC6,WebAPI – > ModelState.IsValid始终返回true

我已经看到很多关于IsValid的post总是正确的,但没有一个能帮助我解决这个问题。 我也在使用MVC5的ASP.NET 4中看到了这个问题。 很明显,我在某个地方错过了一步。 控制器方法: public IHttpActionResult Post([FromBody]ValuesObject value) { if (ModelState.IsValid) { return Json(value); } else { return Json(ModelState); } } ValuesObject类: public class ValuesObject { [Required] public string Name; [Range(10, 100, ErrorMessage = “This isn’t right”)] public int Age; } POST的身体: { Age: 1 } ModelState.IsValid为true。 但我希望Required和Rangevalidation都失败。 我错过了什么? 谢谢, 凯文

启动时出现OData v4错误:找不到该段’Whatever’的资源

我正在构建我的新v4服务,一切顺利,直到我为新模型/实体添加了一个新控制器,并在启动网站进行测试运行时出现此错误。 控制器似乎正确编码,就像其他控制器一样。 控制器“CustomersOData”中操作“GetFeed”上的路径模板“Customers”不是有效的OData路径模板。 未找到“客户”细分的资源。 这对地球意味着什么?

更改我的服务器端WebAPI以获得async / await的好处

试图了解服务器端的异步/等待使用。 我的理解是它只在释放线程时才有用。 如果我有: [HttpGet] public async Task<IEnumerable> Get() { return await Task<IEnumerable>.Run(() => DoThingsAndGetResults()); } IEnumerable DoThingsAndGetResults() { // …Do some CPU computations here… IEnumerable result = myDb.table.Select().ToList(); // entity framework // …Do some CPU computations here… return result; } 线程会被释放吗? 在这种情况下Async / Await是无用的吗? 从async / await获益的唯一方法是,如果我做了一些更大的更改并执行此操作: [HttpGet] public async Task<IEnumerable> Get() { return await […]

是否可以仅将MediaTypeFormatter更改为JSON?

我有一个web api,其中全局配置配置为使用:XmlMediaTypeFormatter 我的问题是我不会使用新的控制器扩展这个web api,而是使用JsonMediaTypeFormatter。 是否可以仅为一个API控制器类将MediaTypeFormatter更改为JSON? 我的问题是没有返回JSON,我已经通过返回HttpResponseMessage来解释这个: return new HttpResponseMessage { Content = new ObjectContent(“Hello world”, new JsonMediaTypeFormatter()), StatusCode = HttpStatusCode.OK }; 这是我要求问题的要求。 如果我有一个具有两个属性的对象: public class VMRegistrant { public int MerchantId { get; set; } public string Email { get; set; } } 我的控制器操作将VMRegistrant作为参数: public HttpResponseMessage CreateRegistrant(VMRegistrant registrant) { // Save registrant in db… } 但问题是,当我用JSON调用该操作时,它失败了。

支持WebApi中的GET *和* POST

我们有一个测试模型。 public class TestRequestModel { public string Text { get; set; } public int Number { get; set; } } 我希望这项服务能够接受以下请求: GET / test?Number = 1234&Text = MyText POST / test with header: Content-Type:application / x-www-form-urlencoded and body: Number = 1234&Text = MyText 带标题的POST / test : Content-Type:application / json和body: {“Text”:“提供!”,“数字”:9876} 路由配置方式如下: _config.Routes.MapHttpRoute( “DefaultPost”, “/{controller}/{action}”, […]

我可以在具有不同复杂参数类型的Web API中使用多个POST方法吗?

我是Web API的新手……这是我的基本路线: config.Routes.MapHttpRoute( name: “Workitems”, routeTemplate: “api/{controller}/{workitemID}”, defaults: new { controller = “workitems”, workitemID = RouteParameter.Optional } ); 这是我想要的: public HttpResponseMessage Post( [FromBody] FolderModel theModel ) public HttpResponseMessage Post( [FromBody] DocumentModel theModel ) 但是,Web API找不到我的第二个Post方法。 我在这里和谷歌都做了很多搜索,但没有发现任何对我有用的东西(好)。 我知道我可以在第二种方法中添加第二个未使用的参数 – 但这太糟糕了。 如果这是正常的C#代码,那么编译器就可以知道选择b / c哪个方法具有不同的签名。 但Web API不够智能。 我查看了自定义约束,但这似乎不合适。 我也不能使用不同的{actions},因为它违反了我的API的RESTful约束(没有RPC,只有资源)。 我也不能把第二篇文章放在不同的控制器上。 我实现这一点的唯一方法是将FolderModel和DocumentModel包装在父对象中,如下所示: public class WorkitemCreateModel { public DocumentModel Document […]