WebApi - 作为新Guid的已发送Guid

时间:2017-10-03 05:36:59

标签: c# .net asp.net-web-api guid

我有一个my_list类,其中一个方法接受一个复杂的对象。

ApiController

调试时,会调用此public class SampleController : ApiController { [Route("api/Sample/")] [HttpPost] public HttpResponseMessage GetSampleInfo([FromBody]SampleClass sampleClassObject) { // Some code } } 类方法,但在对象中作为Controller传递的内容会显示新的Guid(作为Guid)。我首先使用 Postman 检查此方法。我尝试使用00000000-0000-0000-0000-000000000000x-www-form-urlencoded传递对象。

我传递的内容 Postman

application/json

我检查过像我这样的其他问题,但我已经尝试了解决方案,但我仍然将传递的{ "sampleID": "A9A999AA-AA99-9AA9-A999-9999999999AA", "otherValue": 1 } 作为新的Guid

P.S。 Guid如下所示:

SampleClass

更新

我使用了以下public class SampleClass { public Guid sampleID { get; set; } public int otherValue { get; set; } }

JsonConverter

并在public class GuidConverterCustom : JsonConverter { public override bool CanConvert(Type objectType) { return typeof(Guid) == objectType; } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { switch (reader.TokenType) { case JsonToken.Null: return Guid.Empty; case JsonToken.String: string str = reader.Value as string; if (string.IsNullOrEmpty(str)) { return Guid.Empty; } else { return new Guid(str); } default: throw new ArgumentException("Invalid token type"); } } public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { if (Guid.Empty.Equals(value)) { writer.WriteValue(""); } else { writer.WriteValue((Guid)value); } } } 中包含以下内容:

Global.asax.cs

1 个答案:

答案 0 :(得分:2)

您的方法应如下所示,无需自定义JsonConverter。

[Route("sample")]
[HttpPost]
public IHttpActionResult PostGuid(SampleClass id)
{
    return Ok();
}

然后它适用于x-www-form-urlencodedapplication/json。如果你使用json,请不要忘记标题Content-Type: application/json

enter image description here

enter image description here