1

假设您有一个返回 IEnumerable 的请求类 AllCustomers

[Route("/customers")]
public class AllCustomers : IReturn<IEnumerable<Customer>>
{
}

如果您转到该请求的元数据页面,您将收到以下崩溃:

[MemberAccessException: Cannot create an abstract class.]
System.Runtime.Serialization.FormatterServices.nativeGetUninitializedObject(RuntimeType type) +0
System.Runtime.Serialization.FormatterServices.GetUninitializedObject(Type type) +56
ServiceStack.Text.<>c__DisplayClass3.<GetConstructorMethodToCache>b__1() +38
ServiceStack.Text.ReflectionExtensions.CreateInstance(Type type) +64
ServiceStack.WebHost.Endpoints.Metadata.JsonMetadataHandler.CreateMessage(Type dtoType) +49
ServiceStack.WebHost.Endpoints.Metadata.BaseMetadataHandler.CreateResponse(Type type) +267
ServiceStack.WebHost.Endpoints.Metadata.BaseMetadataHandler.ProcessOperations(HtmlTextWriter writer, IHttpRequest httpReq, IHttpResponse httpRes) +688
ServiceStack.WebHost.Endpoints.Metadata.BaseMetadataHandler.Execute(HttpContext context) +267
ServiceStack.WebHost.Endpoints.Support.HttpHandlerBase.ProcessRequest(HttpContext context) +84
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +341
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +69

我认为当给定请求的响应是 IEnumerable 时,元数据页面的实现不应该崩溃,因为这是实现服务接口的一种完全有效的方式(并且比返回列表更可取)。如果它认为 IEnumerable 作为返回类型,它应该足够聪明地为示例部分实例化一个列表。如果返回类型不可实例化,至少它不应该崩溃......

4

1 回答 1

1

ServiceStack 希望您将响应封装在它自己的类中。因此,您将创建一个带有 Customers IEnumerable 属性的 AllCustomerResponse 类。

于 2013-08-05T15:35:57.557 回答