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

私は ServiceStack に関する John Sonmez の優れた 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}; 
    } 
} 

解決:

Route 定義の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つのルートパラメータ(またはワイルドカード付きの1つ)が必要になります。

[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 classは、Service / RestServiceBaseから継承するクラスであり、要求(この場合はEntry)を「処理」し、応答を返します(通常、{request} Responseの命名規則(例:EntryResponse)に従います)。

于 2013-02-26T22:21:51.537 に答える