1

我只是在学习如何使用 ServiceStack,但遇到了一个我无法通过的异常,并且不确定是什么导致了异常。这里是:

Handler for Request not found:    

Request.ApplicationPath: /
Request.CurrentExecutionFilePath: /entry/5/11-11-2012
Request.FilePath: /entry/5/11-11-2012
Request.HttpMethod: GET
Request.MapPath('~'): C:\Projects\Tutorials\FirstServiceStackApp\FirstServiceStackApp\
Request.Path: /entry/5/11-11-2012
Request.PathInfo: 
Request.ResolvedPathInfo: /entry/5/11-11-2012
Request.PhysicalPath: C:\Projects\Tutorials\FirstServiceStackApp\FirstServiceStackApp\entry\5\11-11-2012
Request.PhysicalApplicationPath: C:\Projects\Tutorials\FirstServiceStackApp\FirstServiceStackApp\
Request.QueryString: 
Request.RawUrl: /entry/5/11-11-2012
Request.Url.AbsoluteUri: http://localhost:52920/entry/5/11-11-2012
Request.Url.AbsolutePath: /entry/5/11-11-2012
Request.Url.Fragment: 
Request.Url.Host: localhost
Request.Url.LocalPath: /entry/5/11-11-2012
Request.Url.Port: 52920
Request.Url.Query: 
Request.Url.Scheme: http
Request.Url.Segments: System.String[]
App.IsIntegratedPipeline: True
App.WebHostPhysicalPath: C:\Projects\Tutorials\FirstServiceStackApp\FirstServiceStackApp
App.WebHostRootFileNames: [entry.cs,entryservice.cs,firstservicestackapp.csproj,firstservicestackapp.csproj.user,global.asax,global.asax.cs,packages.config,recordipfilter.cs,statusquery.cs,statusservice.cs,web.config,web.debug.config,web.release.config,app_data,bin,obj,properties,scripts,x64,x86]
App.DefaultHandler: metadata
App.DebugLastHandlerArgs: GET|/entry/5/11-11-2012|C:\Projects\Tutorials\FirstServiceStackApp\FirstServiceStackApp\entry\5\11-11-2012

我正在学习 John Sonmez 关于 ServiceStack 的优秀 Pluralsight 课程,并且刚刚将 OrmLite 部分添加到我的项目中。当我尝试添加新条目时会引发此异常。所以我的 App_Data 文件夹中还没有 SqlLite 文件,也没有创建任何文件。当我尝试调试时,它并没有破坏代码,所以不知道在哪里寻找这个......

编辑:添加了相关的源代码:

[Route("/entry/{Amount}/{EntryTime}", "POST")]
public class Entry { ... }

public class EntryService : Service 
{ 
    public TrackedDataRepository TDRepository { get; set; } 

    public object Any(Entry request) 
    { 
        var id = TDRepository.AddEntry(request); 
        return new EntryResponse {Id = id}; 
    } 
} 

解决方案:

删除路由定义上的POST过滤器,使其适用于所有路由:

[Route("/entry/{Amount}/{EntryTime}")]
4

1 回答 1

1

嗯 - 不确定这是 OrmLite 问题。如果我正确理解异常消息,则暗示您没有包含正确方法的“服务类**”。在这种情况下,由于 HttpMethod 是 Get,您的服务类需要有一个 Get(或 Any)方法。

你有一个像下面这样的“服务类”。

public class EntryService : Service //make sure inheriting from Service or RestServiceBase<Entry> 
{
    public object Get(Entry request)
    {
        //handle request here
    }
}

更新 1: 您还需要正确“路由”您的 Entry 类。在您的情况下,由于您要添加 2 个参数(/5/11-11-2012),因此您需要 2 个路由参数(或一个带有通配符的参数)。

[Route("/Entry/{P1}/{P2}")] //or use /Entry/{P1*} to use wildcard
public class Entry
{
    public string P1 {get; set;}
    public string P2 {get; set;}
}

**service 类是您的类,它继承自 Service/RestServiceBase,它是“处理”您的请求(在本例中为 Entry)并返回您的响应(通常遵循 {request}Response eg.EntryResponse 的名称约定)的类。

于 2013-02-26T22:21:51.537 回答