[Fixes #2700] Added HttpHeadAttribute
This commit is contained in:
parent
27283ec098
commit
b245996949
|
|
@ -0,0 +1,33 @@
|
|||
// Copyright (c) .NET Foundation. 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 Microsoft.Framework.Internal;
|
||||
|
||||
namespace Microsoft.AspNet.Mvc
|
||||
{
|
||||
/// <summary>
|
||||
/// Identifies an action that only supports the HTTP HEAD method.
|
||||
/// </summary>
|
||||
public class HttpHeadAttribute : HttpMethodAttribute
|
||||
{
|
||||
private static readonly IEnumerable<string> _supportedMethods = new string[] { "HEAD" };
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new <see cref="HttpHeadAttribute"/>.
|
||||
/// </summary>
|
||||
public HttpHeadAttribute()
|
||||
: base(_supportedMethods)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new <see cref="HttpHeadAttribute"/> with the given route template.
|
||||
/// </summary>
|
||||
/// <param name="template">The route template. May not be null.</param>
|
||||
public HttpHeadAttribute([NotNull] string template)
|
||||
: base(_supportedMethods, template)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -464,13 +464,13 @@ namespace Microsoft.AspNet.Mvc.ApplicationModels
|
|||
|
||||
// Assert
|
||||
var action = Assert.Single(actions);
|
||||
Assert.Contains("DELETE", action.HttpMethods);
|
||||
Assert.Contains("HEAD", action.HttpMethods);
|
||||
|
||||
Assert.Equal("Delete", action.ActionName);
|
||||
|
||||
var httpMethod = Assert.Single(action.HttpMethods);
|
||||
Assert.Equal("DELETE", httpMethod);
|
||||
Assert.Null(action.AttributeRouteModel);
|
||||
|
||||
Assert.IsType<HttpDeleteAttribute>(Assert.Single(action.Attributes));
|
||||
Assert.Single(action.Attributes.OfType<HttpDeleteAttribute>());
|
||||
Assert.Single(action.Attributes.OfType<HttpHeadAttribute>());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -488,6 +488,7 @@ namespace Microsoft.AspNet.Mvc.ApplicationModels
|
|||
var action = Assert.Single(actions);
|
||||
Assert.Contains("GET", action.HttpMethods);
|
||||
Assert.Contains("POST", action.HttpMethods);
|
||||
Assert.Contains("HEAD", action.HttpMethods);
|
||||
Assert.Equal("Details", action.ActionName);
|
||||
Assert.Null(action.AttributeRouteModel);
|
||||
}
|
||||
|
|
@ -529,12 +530,12 @@ namespace Microsoft.AspNet.Mvc.ApplicationModels
|
|||
Assert.Equal("Edit", action.ActionName);
|
||||
|
||||
var httpMethod = Assert.Single(action.HttpMethods);
|
||||
Assert.Equal("POST", httpMethod);
|
||||
Assert.Equal("HEAD", httpMethod);
|
||||
|
||||
Assert.NotNull(action.AttributeRouteModel);
|
||||
Assert.Equal("Change", action.AttributeRouteModel.Template);
|
||||
|
||||
Assert.IsType<HttpPostAttribute>(Assert.Single(action.Attributes));
|
||||
Assert.IsType<HttpHeadAttribute>(Assert.Single(action.Attributes));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -1010,7 +1011,7 @@ namespace Microsoft.AspNet.Mvc.ApplicationModels
|
|||
[HttpPost("List")]
|
||||
public void Index() { }
|
||||
|
||||
[HttpPost("Change")]
|
||||
[HttpHead("Change")]
|
||||
public void Edit() { }
|
||||
|
||||
public void Remove() { }
|
||||
|
|
@ -1089,11 +1090,13 @@ namespace Microsoft.AspNet.Mvc.ApplicationModels
|
|||
[CustomHttpMethods("PUT", "PATCH")]
|
||||
public void Update() { }
|
||||
|
||||
[HttpHead]
|
||||
[HttpDelete]
|
||||
public void Delete() { }
|
||||
|
||||
[HttpPost]
|
||||
[HttpGet]
|
||||
[HttpHead]
|
||||
public void Details() { }
|
||||
|
||||
[HttpGet]
|
||||
|
|
|
|||
|
|
@ -530,6 +530,7 @@ namespace Microsoft.AspNet.Mvc
|
|||
[InlineData("POST")]
|
||||
[InlineData("DELETE")]
|
||||
[InlineData("PATCH")]
|
||||
[InlineData("HEAD")]
|
||||
public async Task HttpMethodAttribute_ActionWithMultipleHttpMethodAttributes_ORsMultipleHttpMethods(string verb)
|
||||
{
|
||||
// Arrange
|
||||
|
|
@ -873,22 +874,6 @@ namespace Microsoft.AspNet.Mvc
|
|||
}
|
||||
}
|
||||
|
||||
private class HttpMethodAttributeTests_DefaultMethodValidationController
|
||||
{
|
||||
public void Index()
|
||||
{
|
||||
}
|
||||
|
||||
// Method with custom attribute.
|
||||
[HttpGet]
|
||||
public void Get()
|
||||
{ }
|
||||
|
||||
// InvalidMethod ( since its private)
|
||||
private void Post()
|
||||
{ }
|
||||
}
|
||||
|
||||
private class ActionNameController
|
||||
{
|
||||
[ActionName("CustomActionName_Verb")]
|
||||
|
|
@ -914,6 +899,7 @@ namespace Microsoft.AspNet.Mvc
|
|||
[HttpPost]
|
||||
[HttpDelete]
|
||||
[HttpPatch]
|
||||
[HttpHead]
|
||||
public void Put()
|
||||
{
|
||||
}
|
||||
|
|
@ -923,9 +909,5 @@ namespace Microsoft.AspNet.Mvc
|
|||
{
|
||||
}
|
||||
}
|
||||
|
||||
private class HttpMethodAttributeTests_DerivedController : HttpMethodAttributeTests_RestOnlyController
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ namespace Microsoft.AspNet.Mvc
|
|||
data.Add(new HttpPutAttribute(), new[] { "PUT" });
|
||||
data.Add(new HttpPatchAttribute(), new[] { "PATCH" });
|
||||
data.Add(new HttpDeleteAttribute(), new[] { "DELETE" });
|
||||
data.Add(new HttpHeadAttribute(), new[] { "HEAD" });
|
||||
data.Add(new AcceptVerbsAttribute("MERGE", "OPTIONS"), new[] { "MERGE", "OPTIONS" });
|
||||
|
||||
return data;
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ namespace Microsoft.AspNet.Mvc
|
|||
data.Add(new HttpPutAttribute());
|
||||
data.Add(new HttpPatchAttribute());
|
||||
data.Add(new HttpDeleteAttribute());
|
||||
data.Add(new HttpHeadAttribute());
|
||||
data.Add(new RouteAttribute(""));
|
||||
|
||||
return data;
|
||||
|
|
|
|||
Loading…
Reference in New Issue