2

私は ServiceStack のクリーンな規則を気に入っていますが、最近厄介な問題に遭遇しました。ユーザーは「作成」ページをロードして「広告」を作成し、フォーム データを投稿します。サーバーは投稿されたデータを処理し、成功するとユーザーをリダイレクトする必要があります。

これをデバッガで実行します。POST メソッドはエラーなしで完了しますが、サーバーはサービスの終了後に常にエラーを返します。

Object reference not set to an instance of an object. AT 

CompiledRazorTemplates.Dynamic.dfdcdedabeabca.Execute() at ServiceStack.Razor.Templating.TemplateService.ExecuteTemplate[T](T model, String name, String defaultTemplatePath, IHttpRequest httpReq, IHttpResponse httpRes) at ServiceStack.Razor.RazorFormat.ProcessRazorPage(IHttpRequest httpReq, ViewPageRef razorPage, Object dto, IHttpResponse httpRes) at ServiceStack.Razor.RazorFormat.ProcessRequest(IHttpRequest httpReq, IHttpResponse httpRes, Object dto) at ServiceStack.WebHost.Endpoints.Formats.HtmlFormat.<>c__DisplayClass1.<SerializeToStream>b__0(IViewEngine x) at System.Linq.Enumerable.Any[TSource](IEnumerable1ソース、ファンク2 predicate) at ServiceStack.WebHost.Endpoints.Formats.HtmlFormat.SerializeToStream(IRequestContext requestContext, Object response, IHttpResponse httpRes) at ServiceStack.Common.Web.HttpResponseFilter.SerializeToStream(IRequestContext requestContext, Object response, Stream responseStream) at ServiceStack.Common.Web.HttpResult.WriteTo(Stream responseStream) at ServiceStack.WebHost.Endpoints.Extensions.HttpResponseExtensions.WriteToOutputStream(IHttpResponse response, Object result, Byte[] bodyPrefix, Byte[] bodySuffix) at ServiceStack.WebHost.Endpoints.Extensions.HttpResponseExtensions.WriteToResponse(IHttpResponse response, Object result, ResponseSerializerDelegate defaultAction, IRequestContext serializerCtx, Byte[] bodyPrefix, Byte[] bodySuffix)

問題を切り分けるために、コードを次のように煮詰めました。

    [Route("/ad/create", Verbs = "GET")]
public class AdCreateViewModelCriteria
{
}

[Route("/ad/create", Verbs = "POST")]
public class AdCreate
{
    //some things
}

public class AdCreateService:Service
{
//the error occurs AFTER this method is complete
    public object Post(AdCreate ac)
    {
        try
        {
            //do some stuff
            return new HttpResult()
                       {
                           StatusCode = HttpStatusCode.Redirect,
                           Headers ={{HttpHeaders.Location, "/home"}}
                       };
        }
        catch (Exception e)
        {
            return new HttpResult(e)
                       {
                           StatusCode = HttpStatusCode.InternalServerError
                       };
        }
    }


    [DefaultView("adcreate")]
    public object Get(AdCreateViewModelCriteria criteria)
    {
        return AdCreateViewModel.Load(criteria,Db);
    }
}
4

0 に答える 0