我只是试图创建一个简单的POST函数,让我发布JSON。我尝试复制示例,但不确定自己在做什么。任何帮助将不胜感激,我觉得这很简单,我很想念。
我要发布的内容:
POST地址:http://localhost:49653/save/file
标题: 内容类型:application / json
未加工的身体: { uuid:“ someUuid”, fileName:“测试”, dateTime:“ dateee”, json:“一些json” }
namespace SomeNamespace.Model
{
[Route("/save/file", "POST")]
public class SaveFileRequest
{
public Stream RequestStream { get; set; }
}
public class SaveFileResponse
{
public bool Success { get; set; }
}
}
namespace SomeNamespace.ServiceInterface
{
[EnableCors(allowedMethods:"POST")]
public class SaveFileService : Service
{
public object Any(SaveFileRequest request)
{
var response = new SaveFileResponse { Success = false };
string savedataJson;
using (var reader = new StreamReader(Request.InputStream))
{
savedataJson = reader.ReadToEnd();
}
try
{
Console.WriteLine(savedataJson); // When I debug, the contents are ""
}
catch(Exception ex) {...}
}
}
}
}
答案 0 :(得分:1)
您的SaveFileRequest
请求DTO需要实现IRequiresRequestStream
。
以下是reading directly from the request stream的文档:
代替注册自定义绑定程序,您可以跳过请求DTO的序列化,而可以添加IRequiresRequestStream接口以直接检索流,而无需填充请求DTO。
//Request DTO
public class RawBytes : IRequiresRequestStream
{
/// <summary>
/// The raw Http Request Input Stream
/// </summary>
Stream RequestStream { get; set; }
}
哪个告诉ServiceStack跳过尝试反序列化请求的过程,以便您可以自己读取原始的HTTP Request正文,例如:
public object Post(RawBytes request)
{
byte[] bytes = request.RequestStream.ReadFully();
string text = bytes.FromUtf8Bytes(); //if text was sent
}