标签: asp.net-web-api

从数据流中获取字符串

我通过 .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

vb.net stream asp.net-web-api

0
推荐指数
1
解决办法
1万
查看次数

REST api 管理字段最大字符数的最佳实践是什么?

我有一个 Web Api RESTful 服务,它有一些 POST 端点来将新对象插入数据库。我们希望将对象名称接受的最大字符数限制为 20 个。数据库、API 或 UI 是否应该处理此问题?

显然,我们可以在任何一层上阻止超过 20 个字符。但是,如果它通过了 UI,则表单已提交。那时,我们希望服务层或数据库层返回一个信息性的解释,说明为什么它不被接受。处理这个问题的最佳做法是什么?

asp.net rest asp.net-web-api

0
推荐指数
1
解决办法
370
查看次数

WebAPI 是否可以在操作中发布 IFormCollection 和对象?

是否可以在操作中发布 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

0
推荐指数
1
解决办法
2095
查看次数

如果对象为空,如何忽略 FluentValidation 规则

如何忽略空对象的 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 时,它给出了错误

错误的请求。请求有一些无效参数或参数不够。

.net fluentvalidation asp.net-web-api

0
推荐指数
1
解决办法
1296
查看次数

如何验证电子邮件属性在 ASP .NET CORE API 中是否唯一?

我需要发帖或在服务器端进行验证以检查电子邮件是否唯一。

在研究中,我一直做的例子是一个传统的 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)

c asp.net-web-api asp.net-core

0
推荐指数
1
解决办法
4835
查看次数

如何在 ASP.NET Web API 5.2.3 中使用 FromForm 属性

我在 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)

邮递员要求:

在此处输入图片说明

c# asp.net-mvc-4 asp.net-web-api

0
推荐指数
1
解决办法
2608
查看次数

如何使用登录页面保护 ASP.NET Core 2.2 Web Api Swagger?

netcore 2.2 web api 通过使用 swagger 有什么方法可以保护我的 api 文档,然后用户才能看到他们将转到登录> 然后 api 文档的那些 api 文档。

更强大的stackoverflow。希望任何人都可以帮助..

asp.net-web-api swagger swagger-ui asp.net-core

0
推荐指数
1
解决办法
1388
查看次数

如何使用 Web API 将多个数据项插入 SQL?

我有一个这样的代码:

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)

c# json sql-insert asp.net-web-api

0
推荐指数
1
解决办法
207
查看次数

即使指定了 JWT 身份验证,也未指定任何身份验证方案错误

我是 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。仍然为什么它不接受?

c# jwt asp.net-web-api azure-active-directory .net-core

0
推荐指数
1
解决办法
1万
查看次数

如何在查询字符串中为日期时间传递null?

我正在尝试执行发送 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 发送它们时也会出现同样的错误。

c# asp.net-web-api postman

0
推荐指数
1
解决办法
43
查看次数