ASP.NET Core Как привязать данные из тела

Я использую Postman и пытаюсь отправить данные JSON сообщения в теле. Как выглядит запрос почтальона

Это мой метод API

 [HttpPost("attach")]
 [AllowAnonymous]
 public async Task<IActionResult> AttachToBuilding([FromBody]AttachmentDto dto)

После отправки запроса dto всегда равно нулю. Результат изображения

Это моя модель

public class AttachmentDto
{
    public string Identity { get; set; }
    public Guid BuildingId { get; set; }
    [Required]
    public string FirstName { get; set; }
    [Required]
    public string LastName { get; set; }
    public string MiddleName { get; set; }
    public string Phone { get; set; }
    [Required]
    public string UniqueDeviceId { get; set; }
    [Required]
    public int ApartmentNumber { get; set; }
    [Required]
    public int AgreementNumber { get; set; }
    [Required]
    public int FloorNumber { get; set; }
}

Метод My Startup.cs ConfigurationServices

 public void ConfigureServices(IServiceCollection services)
 {
        services.AddOptions();

        services.AddCors(options =>
        {
            options.AddPolicy("AllowAnyOrigin",
                    builder =>
                    {
                        builder.AllowAnyOrigin();
                        builder.AllowAnyMethod();
                        builder.AllowAnyHeader();
                    });
        });

        services.AddDbContext<KskEfContext>(options => options.UseSqlServer(Configuration.GetConnectionString(ConnectionName)));

        services.AddSingleton<IConfiguration>(Configuration);

        AddDependencies(services);

        services.AddMvcCore()
            .AddFormatterMappings()
            //for aspe.net core  need to add explicitly the Api Explorer service (swagger)
            .AddApiExplorer()
            .AddDataAnnotations()
        .AddJsonFormatters(options => options.ContractResolver = new CamelCasePropertyNamesContractResolver());


        services.AddAutoMapper();

        //Register the Swagger generator, defining one or more Swagger documents
        services.AddSwaggerGen(c =>
        {
            c.SwaggerDoc("v1", new Info { Title = "KSK api", Version = "v1" });
            c.IncludeXmlComments(GetXmlCommentsPath());
        });
    }

Я считаю, что моя конфигурация правильная, и я разработал свой метод api, как и в предыдущих версиях ASP.NET WebApi, ничего экстраординарного. Возможно, проблема связана с версией фреймворка.

Мои зависимости от project.json

"dependencies": {
"Microsoft.AspNetCore.Authentication.JwtBearer": "1.0.0",
"Microsoft.AspNetCore.StaticFiles": "1.0.0",
"AutoMapper": "5.2.0",
"AutoMapper.Extensions.Microsoft.DependencyInjection": "1.2.0",
"Ksk.DataAccess": "1.0.0-*",
"Ksk.Domain": "1.0.0-*",
"Microsoft.ApplicationInsights.AspNetCore": "1.0.0",
"Microsoft.AspNetCore.Mvc": "1.0.1",
"Microsoft.AspNetCore.Routing": "1.0.1",
"Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
"Microsoft.AspNetCore.Server.Kestrel": "1.0.1",
"Microsoft.EntityFrameworkCore.Design": "1.1.0",
"Microsoft.EntityFrameworkCore.SqlServer": "1.1.0",
"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview4-final",
"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
"Microsoft.Extensions.Configuration.FileExtensions": "1.0.0",
"Microsoft.Extensions.Configuration.Json": "1.0.0",
"Microsoft.Extensions.Logging": "1.1.0",
"Microsoft.Extensions.Logging.Console": "1.0.0",
"Microsoft.Extensions.Logging.Debug": "1.0.0",
"Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",
"Microsoft.AspNetCore.Cors": "1.1.1",
"Microsoft.NETCore.App": {
  "version": "1.0.1",
  "type": "platform"
},
"Swashbuckle.AspNetCore": "1.0.0-rc1"
},

Детали моего запроса

Accept:*/*
Accept-Encoding:gzip, deflate, br
Accept-Language:en-US,en;q=0.8
Content-Length:280
Content-Type:application/json
Host:localhost:5000
Origin:http://localhost:5000
Proxy-Connection:keep-alive
Referer:http://localhost:5000/docs/index.html
User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36

Request Payload
{
  "Identity": "AST-25",
  "BuildingId": "",
  "FirstName": "Petr",
  "LastName": "Petrov",
  "MiddleName": "Petrovich",
  "Phone": "+77012223344",
  "UniqueDeviceId": "68753A44-4D6F-1226-9C60-0050E4C00067",
  "ApartmentNumber": 20,
  "AgreementNumber": 292,
  "FloorNumber": 5
}

person Thugmaster    schedule 27.04.2017    source источник
comment
Покажи свой json-пост   -  person J. Doe    schedule 27.04.2017
comment
Детали запроса добавлены   -  person Thugmaster    schedule 27.04.2017
comment
Используете ли вы какое-либо промежуточное ПО перед промежуточным ПО MVC, которое читает из потока запросов? Поскольку поток запроса направлен только вперед и не может быть перемотан (поскольку он напрямую считывает данные, отправленные из браузера), поэтому, если вы читаете поток данных, вы оказываетесь в конце потока, и когда связыватель модели пытается его прочитать, у него нет данных   -  person Tseng    schedule 27.04.2017
comment
Нет, я не. Первое промежуточное ПО, которое я использую, - это MVC.   -  person Thugmaster    schedule 27.04.2017
comment
@ user2148690, похоже, вы смешиваете mvc и web api. если это предназначено для веб-API, замените [Route("attach")][HttpPost] только [HttpPost("attach")] прочтите также о маршрутизации атрибутов здесь docs.microsoft.com/en-us/aspnet/core/mvc/controllers/   -  person Nkosi    schedule 27.04.2017
comment
Nkosi, да пробовал, но ничего не изменилось   -  person Thugmaster    schedule 27.04.2017


Ответы (1)


Попробуйте заменить значение buidingId на null или "00000000-0000-0000-0000-000000000000", потому что контроллер не может преобразовать пустой string в Guid.

person bonheury    schedule 07.05.2017
comment
Хорошим вариантом также было бы использовать модель представления в этом случае ... Я понимаю, что это еще 1 класс, но это помогает, особенно если вы показываете это внешним клиентам ... вы не хотите оставлять место для массового назначения или из-за проблем с публикацией ... Я проголосовал за ответ, потому что он будет работать, но лично я бы пошел с виртуальной машиной ... - person Muqeet Khan; 08.05.2017