aspnetcore/test/WebSites/ModelBindingWebSite/Controllers/FromHeader_BlogController.cs

162 lines
5.3 KiB
C#

// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using Microsoft.AspNet.Mvc;
namespace ModelBindingWebSite.Controllers
{
[Route("Blog")]
public class FromHeader_BlogController : Controller
{
[HttpGet("BindToProperty/CustomName")]
public object BindToProperty(BlogWithHeaderOnProperty blogWithHeader)
{
return new Result()
{
HeaderValue = blogWithHeader.Title,
HeaderValues = blogWithHeader.Tags,
ModelStateErrors = ModelState.Where(kvp => kvp.Value.Errors.Count > 0).Select(kvp => kvp.Key).ToArray(),
};
}
// Echo back the header value
[HttpGet("BindToStringParameter")]
public object BindToStringParameter([FromHeader] string transactionId)
{
return new Result()
{
HeaderValue = transactionId,
ModelStateErrors = ModelState.Where(kvp => kvp.Value.Errors.Count > 0).Select(kvp => kvp.Key).ToArray(),
};
}
// Echo back the header value
[HttpGet("BindToStringParameterDefaultValue")]
public object BindToStringParameterDefaultValue([FromHeader] string transactionId = "default-value")
{
return new Result()
{
HeaderValue = transactionId,
ModelStateErrors = ModelState.Where(kvp => kvp.Value.Errors.Count > 0).Select(kvp => kvp.Key).ToArray(),
};
}
// Echo back the header values
[HttpGet("BindToStringArrayParameter")]
public object BindToStringArrayParameter([FromHeader] string[] transactionIds)
{
return new Result()
{
HeaderValues = transactionIds,
ModelStateErrors = ModelState.Where(kvp => kvp.Value.Errors.Count > 0).Select(kvp => kvp.Key).ToArray(),
};
}
[HttpGet("BindToStringParameter/CustomName")]
public object BindToStringParameterWithCustomName([FromHeader(Name = "tId")] string transactionId)
{
return new Result()
{
HeaderValue = transactionId,
ModelStateErrors = ModelState.Where(kvp => kvp.Value.Errors.Count > 0).Select(kvp => kvp.Key).ToArray(),
};
}
[HttpGet("BindToModel")]
public object BindToModel(BlogPost blogPost)
{
return new Result()
{
HeaderValue = blogPost.Title,
HeaderValues = blogPost.Tags,
ModelStateErrors = ModelState.Where(kvp => kvp.Value.Errors.Count > 0).Select(kvp => kvp.Key).ToArray(),
};
}
[HttpGet("BindToModelWithInitializedValue")]
public object BindToModelWithInitializedValue(BlogPostWithInitializedValue blogPost)
{
return new Result()
{
HeaderValue = blogPost.Title,
HeaderValues = blogPost.Tags,
ModelStateErrors = ModelState.Where(kvp => kvp.Value.Errors.Count > 0).Select(kvp => kvp.Key).ToArray(),
};
}
[HttpGet("BindToModelWithDefaultValue")]
public object BindToModelWithDefaultValue(BlogPostWithDefaultValue blogPost)
{
return new Result()
{
HeaderValue = blogPost.Title,
HeaderValues = blogPost.Tags,
ModelStateErrors = ModelState.Where(kvp => kvp.Value.Errors.Count > 0).Select(kvp => kvp.Key).ToArray(),
};
}
private class Result
{
public string HeaderValue { get; set; }
public string[] HeaderValues { get; set; }
public string[] ModelStateErrors { get; set; }
}
public class BlogPost
{
[Required]
[FromHeader]
public string Title { get; set; }
[FromHeader]
public string[] Tags { get; set; }
public string Author { get; set; }
}
public class BlogWithHeaderOnProperty
{
[FromHeader(Name = "BlogTitle")]
[Required]
public string Title { get; set; }
[FromHeader(Name = "BlogTags")]
public string[] Tags { get; set; }
public string Author { get; set; }
}
public class BlogPostWithInitializedValue
{
[Required]
[FromHeader]
public string Title { get; set; } = "How to Make Soup";
[FromHeader]
public string[] Tags { get; set; } = new string[] { "Cooking" };
public string Author { get; set; }
}
public class BlogPostWithDefaultValue
{
[Required]
[FromHeader]
[DefaultValue("How to Make Soup")]
public string Title { get; set; }
[FromHeader]
[DefaultValue(new string[] { "Cooking" })]
public string[] Tags { get; set; }
public string Author { get; set; }
}
}
}