我通过 .NET 3.5 应用程序访问 API,到目前为止我的代码如下所示:
Dim strLink As String = "http://www.google.co.uk"
Dim request As WebRequest = System.Net.WebRequest.Create("http://random-web-api/controller/id")
Dim response As WebResponse = request.GetResponse()
If CType(response,HttpWebResponse).StatusCode = HttpStatusCode.OK Then
Dim dataStream As Stream = response.GetResponseStream()
' How do I get the String from the Stream?
response.Close()
End If
Run Code Online (Sandbox Code Playgroud)
我能够调用 API,并获得 OK 状态,但我不知道如何将我的转换为VB 中的ResponseStreama ?String
我有一个 Web Api RESTful 服务,它有一些 POST 端点来将新对象插入数据库。我们希望将对象名称接受的最大字符数限制为 20 个。数据库、API 或 UI 是否应该处理此问题?
显然,我们可以在任何一层上阻止超过 20 个字符。但是,如果它通过了 UI,则表单已提交。那时,我们希望服务层或数据库层返回一个信息性的解释,说明为什么它不被接受。处理这个问题的最佳做法是什么?
是否可以在操作中发布 IFormCollection 和 Object?
public Task CreateEMail(IFormCollection collection, [FromBody] Model model)
Run Code Online (Sandbox Code Playgroud)
我尝试从 Angular 向 WebAPI 发出发布请求,该请求是上传文件和模型的组合。
角度代码:
let model = {title:'test', subject:'test'};
let formData = new FormData();
for (let i = 0; i < this.droppedFilesData.length; i++) {
let file = this.droppedFilesData[i];
let fileName = file.name;
formData.append(fileName, file);
}
this.service.createEmail(formData, model); // how to implement to post formData and model
Run Code Online (Sandbox Code Playgroud)
网页API代码:
public Task CreateEMail(IFormCollection collection, [FromBody] Model model)
{
...
}
Run Code Online (Sandbox Code Playgroud)
我如何实现这个 WebAPI?
更新:我正在考虑将所有内容添加到 FormCollection 中,但这将是解析数据的非常糟糕的代码
c# asp.net-web-api angularjs asp.net-core asp.net-core-webapi
如何忽略空对象的 FluentValidation 规则。我有验证器类
public class RequestModel
{
public int? RecordCount { get; set; } = 100;
}
public class ModelValidator : AbstractValidator<RequestModel>
{
public ModelValidator()
{
When(x => x != null, () =>
{
RuleFor(item => item.RecordCount)
.Cascade(CascadeMode.StopOnFirstFailure)
.Must(x => x == null || (x.Value > 0 && x.Value <= 1000))
.WithMessage($"Invalid Limit. Limit must be between 1 and {1000}. (inclusive) ");
});
}
}
Run Code Online (Sandbox Code Playgroud)
在这里,我想仅在通过时验证记录计数。但是当我将空对象传递给 api body 时,它给出了错误
错误的请求。请求有一些无效参数或参数不够。
我需要发帖或在服务器端进行验证以检查电子邮件是否唯一。
在研究中,我一直做的例子是一个传统的 MVC 应用程序,而不是一个 api。
在许多情况下,我看到 [Remote] https://docs.microsoft.com/pt-br/aspnet/core/mvc/models/validation?view=aspnetcore-2.2#remote-attribute。我尝试按照文档来实现,但是调试验证了控制器中的函数没有被调用。
用户.cs
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.AspNetCore.Mvc;
namespace Base.Models
{
[Table("users")]
public partial class User
{
...
[Required]
[EmailAddress]
[Remote(action: "VerifyEmail", controller: "UserController",ErrorMessage="Email already in use")]
[Column("email", TypeName = "varchar(254)")]
public string Email { get; set; }
...
}
}
Run Code Online (Sandbox Code Playgroud)
用户控制器.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Base.Models;
namespace Base.Controllers
{
[Route("api/users")]
[ApiController]
public class UserController : Controller
{
... …Run Code Online (Sandbox Code Playgroud) 我在 VS 2017 中创建了一个全新的项目 - 通过使用 Web API 模板。但是我无法[FromForm]在控制器操作方法中使用属性。
这里有一些来自 package.config 的行:
<package id="Microsoft.AspNet.Mvc" version="5.2.3" targetFramework="net461" />
<package id="Microsoft.AspNet.Razor" version="3.2.3" targetFramework="net461" />
<package id="Microsoft.AspNet.Web.Optimization" version="1.1.3" targetFramework="net461" />
<package id="Microsoft.AspNet.WebApi" version="5.2.3" targetFramework="net461" />
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net461" />
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net461" />
Run Code Online (Sandbox Code Playgroud)
是否[FromForm]在 Web API 版本 5.2.3 中可用?
如果不是,那么如何读取 FormData 值?
代码:
[HttpPost]
[Route("v1/users/register")]
public void RegisterUser(FormDataCollection formData)
{
var fName = formData["firsName"]; // formData is NULL
}
Run Code Online (Sandbox Code Playgroud)
邮递员要求:
netcore 2.2 web api 通过使用 swagger 有什么方法可以保护我的 api 文档,然后用户才能看到他们将转到登录> 然后 api 文档的那些 api 文档。
更强大的stackoverflow。希望任何人都可以帮助..
我有一个这样的代码:
public IHttpActionResult Post(CUSTOMER [] newCustomer)
{
try
{
foreach (CUSTOMER item in newCustomer)
{
var AddedCust = db.CUSTOMERs.Add(item);
}
int insertedRecords = db.SaveChanges();
return Ok(insertedRecords);
}
catch (Exception)
{
return BadRequest(ModelState);
}
}
Run Code Online (Sandbox Code Playgroud)
使用 Postman,我尝试发布不止一条记录 - 但我得到了一个例外:
{
"NAME": "test1",
"SURNAME": "Aleksandrova",
"BIRTHPLACE": "Minsk",
"GENDER": "F",
"IDENTITYNO": "AA75 857445",
"IDENTITYPINCODE": 2552,
"BIRTHDATE": "1970-06-19T00:00:00"
}
{
"NAME": "test2",
"SURNAME": "Aleksat34t34ndrova",
"BIRTHPLACE": "Minsk",
"GENDER": "F",
"IDENTITYNO": "AA75 857445",
"IDENTITYPINCODE": 2552,
"BIRTHDATE": "1970-06-19T00:00:00"
}
{
"NAME": "test3",
"SURNAME": "Aleksandrova",
"BIRTHPLACE": "Minsk",
"GENDER": …Run Code Online (Sandbox Code Playgroud) 我是 AzureAD 身份验证的新手。我在 startup.cs 中使用以下设置设置了我的 Web API
services.AddAuthentication(sharedopt => sharedopt.DefaultScheme = JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer("AzureAd", options =>
{
options.Audience = Configuration.GetValue<string>("AzureAd:Audience");
options.Authority = Configuration.GetValue<string>("AzureAd:Instance")
+ Configuration.GetValue<string>("AzureAd:TenantId");
options.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters()
{
ValidIssuer = Configuration.GetValue<string>("AzureAd:Issuer"),
ValidAudience = Configuration.GetValue<string>("AzureAd:Audience")
};
});
Run Code Online (Sandbox Code Playgroud)
我希望我的客户端应用程序 (Angular) 将在其请求中附加 Authorization 标头,因此它可以访问 API
但是当我执行 Web API 并尝试使用授权打开任何 API 时,它会触发此错误
InvalidOperationException: 未指定 authenticationScheme,也未找到 DefaultChallengeScheme。可以使用 AddAuthentication(string defaultScheme) 或 AddAuthentication(Action configureOptions) 设置默认方案。
我已经指定了 JWTBearerDefaults.AuthenticationScheme。仍然为什么它不接受?
我正在尝试执行发送 DateTime 的 API?参数作为查询字符串。下面是我的 API:
[HttpGet("filter")]
public async Task<ActionResult<PagedList<Inv>>> GetFilterAsync([FromQuery] DateTime? dateFrom, [FromQuery] DateTime? dateTo, [FromQuery] int page, [FromQuery] int pageSize)
{
Run Code Online (Sandbox Code Playgroud)
但是当我尝试在邮递员中执行它时,如下所示,出现错误。
http://localhost:5000/api/Inv/filter?dateFrom=null&dateTo=null&page=1&pageSize=20
Run Code Online (Sandbox Code Playgroud)
这是错误:
{
"errors": {
"dateTo": [
"The value 'null' is not valid."
],
"dateFrom": [
"The value 'null' is not valid."
]
},
"type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
"title": "One or more validation errors occurred.",
"status": 400,
"traceId": "|8c4093d7-485e79a6a805ceae."
}
Run Code Online (Sandbox Code Playgroud)
但是,当我将其保留为如下空白时,它会起作用。我们不能通过null而不是blank space吗?
http://localhost:5000/api/Inv/filter?dateFrom=&dateTo=&page=1&pageSize=20
Run Code Online (Sandbox Code Playgroud)
此外,当我们尝试从 UI 发送它们时也会出现同样的错误。
asp.net-web-api ×10
c# ×5
asp.net-core ×3
.net ×1
.net-core ×1
angularjs ×1
asp.net ×1
c ×1
json ×1
jwt ×1
postman ×1
rest ×1
sql-insert ×1
stream ×1
swagger ×1
swagger-ui ×1
vb.net ×1