Tôi nghĩ Thuộc tính là một ý tưởng tuyệt vời và vì vậy tôi đã triển khai thuộc tính có thể giúp người khác cho đến khi các bạn phát hành nó.
Trang trí hành động của bạn với các thuộc tính:
public class FooController : ApiController
{
[ResponseType(typeof(Bar))]
public HttpResponseMessage Get(string id)
{
// ...
}
}
Xác định các thuộc tính:
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
public class ResponseTypeAttribute : Attribute
{
public ResponseTypeAttribute(Type type)
{
if (type == null)
{
throw new ArgumentNullException("type");
}
Type = type;
}
public Type Type { get; private set; }
}
Xác định phương pháp để đăng ký các loại phản ứng:
/// <summary>
/// Registers api controller actions which return HttpResponseMessage
/// and include the ResponseType attribute to be populated with web api
/// auto generated help.
/// </summary>
/// <param name="assembly">The assembly to search for</param>
public static void RegisterHelpResponseTypes(Assembly assembly)
{
var apiControllerTypes = assembly
.GetTypes().Where(typeof(ApiController).IsAssignableFrom);
foreach (var apiControllerType in apiControllerTypes)
{
var validActions = apiControllerType.GetMethods()
.Where(method =>
Attribute.IsDefined(method, typeof(ResponseTypeAttribute))
&&
(method.ReturnType == typeof(HttpResponseMessage)));
foreach (var action in validActions)
{
var responseType = (ResponseTypeAttribute)Attribute
.GetCustomAttributes(action)
.Single(x => x is ResponseTypeAttribute);
var controllerName = apiControllerType.Name.Substring(0,
apiControllerType.Name.LastIndexOf("Controller",
StringComparison.OrdinalIgnoreCase));
var actionName = action.Name;
GlobalConfiguration
.Configuration
.SetActualResponseType(responseType.Type,
controllerName,
actionName);
}
}
}
Bao gồm nó trên ứng dụng của bạn bắt đầu:
RegisterHelpResponseTypes(typeof(FooController).Assembly);
Vui lòng cho tôi biết nếu bạn tìm thấy bất kỳ vấn đề nào.
Nguồn
2013-07-23 23:36:51
Bạn nên xác định mã trạng thái cho trường hợp ngoại lệ khác với những gì được mong đợi. Trong ứng dụng Restful, người gọi API của bạn sẽ mong đợi '200 OK' trừ khi có lỗi xảy ra. –
@CharlieBrown: Hoặc các mã 2xx khác, chẳng hạn như 201 Tạo. http://en.wikipedia.org/wiki/List_of_HTTP_status_codes#2xx_Success – SLaks
@SLaks chính xác đó là lý do tại sao tôi sẽ đánh giá cao lời khuyên của bạn về điều này –