1

応答フィルターを使用してデータ検証メッセージをサービスに追加する servicestack サーバーがあります。私の Put/Post ハンドラーは、Response が検証オブジェクトに設定された HttpResult オブジェクトを返します。次に、応答フィルターは、このオブジェクトを生の HTML 文字列に分解し、それを Response オブジェクトに設定します。これを機能させるには、空白の HTML テンプレート ファイルとともに「ビュー」に String.md ファイルを作成する必要がありました。私が今見ている問題は、カスタム html 応答にコンマ "," が含まれている場合に、jsv fromater が文字列をシリアル化しようとし、例外をスローすることです。

   at System.String.get_Chars(Int32 index)
   at ServiceStack.Text.Jsv.JsvTypeSerializer.EatMapKey(String value, Int32& i)
   at ServiceStack.Text.Common.DeserializeDictionary`1.ParseStringDictionary(String value)
   at ServiceStack.Text.Jsv.JsvReader`1.Parse(String value)
   at ServiceStack.Text.TypeSerializer.DeserializeFromString[T](String value)
   at ServiceStack.Html.ViewDataDictionary.PopulateModelState()
   at ServiceStack.Html.HtmlHelper.Init(IViewEngine viewEngine, ViewDataDictionary viewData)
   at ServiceStack.Html.HtmlHelper.Init(MarkdownPage markdownPage, Dictionary`2 scopeArgs, Boolean renderHtml, ViewDataDictionary viewData)
   at ServiceStack.Markdown.MarkdownViewBase.Init(IAppHost appHost, MarkdownPage markdownPage, Dictionary`2 scopeArgs, Object model, Boolean renderHtml)
   at ServiceStack.WebHost.Endpoints.Support.Markdown.MarkdownPage.Write(TextWriter textWriter, PageContext pageContext)
   at ServiceStack.WebHost.Endpoints.Support.Markdown.TemplateExtensions.RenderToString(MarkdownPage markdownPage, Dictionary`2 scopeArgs, Boolean renderHtml)
   at ServiceStack.WebHost.Endpoints.Formats.MarkdownFormat.RenderDynamicPage(MarkdownPage markdownPage, Dictionary`2 scopeArgs, Boolean renderHtml, Boolean renderTemplate)
   at ServiceStack.WebHost.Endpoints.Formats.MarkdownFormat.RenderDynamicPage(MarkdownPage markdownPage, String pageName, Object model, Boolean renderHtml, Boolean renderTemplate)
   at ServiceStack.WebHost.Endpoints.Formats.MarkdownFormat.ProcessMarkdownPage(IHttpRequest httpReq, MarkdownPage markdownPage, Object dto, IHttpResponse httpRes)
   at ServiceStack.WebHost.Endpoints.Formats.MarkdownFormat.<Register>b__1(IRequestContext requestContext, Object dto, IHttpResponse httpRes)
   at ServiceStack.WebHost.Endpoints.Formats.HtmlFormat.<>c__DisplayClass1.<SerializeToStream>b__0(StreamSerializerResolverDelegate x)
   at System.Linq.Enumerable.Any[TSource](IEnumerable`1 source, Func`2 predicate)
   at ServiceStack.WebHost.Endpoints.Formats.HtmlFormat.SerializeToStream(IRequestContext requestContext, Object dto, IHttpResponse httpRes)
   at ServiceStack.Common.Web.HttpResponseFilter.SerializeToStream(IRequestContext requestContext, Object response, Stream responseStream) in i:\GitHub\ServiceStack\src\ServiceStack.Common\Web\HttpResponseFilter.cs:line 152
   at ServiceStack.Common.Web.HttpResult.WriteTo(Stream responseStream) in i:\GitHub\ServiceStack\src\ServiceStack.Common\Web\HttpResult.cs:line 219
   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)

私の質問は、これらの応答に対して jsv をオフにするにはどうすればよいですか? または、生のhtmlを返すより良い方法はありますか? 応答コードと返されるヘッダーを制御する必要があるため、要求ハンドラーに文字列を返させることはできません。

4

1 に答える 1

0

HttpResult 内で HTML 文字列を返すことができます。

return new HttpResult("<html>...</html>", ContentType.Html);

参考までに、ServiceStack の HTML ストーリーは次の場所にあります。

ServiceStack で HTML ページを提供することは可能ですか?

Markdown に加えて、新しい MVC Razor サポートを追加しました。以下で at の例を確認できます。

于 2012-08-14T00:09:10.097 に答える