Web Api如何在同一响应中同时返回动态创建的图像和文本数据

时间:2013-02-12 14:50:57

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

我想返回一个动态创建的图像,而不是从数据库或文件中检索。假设我有一个简单的ZipCode类。我想有一个属性,将返回邮政编码的图像表示。 JSON返回“ZipAsImage”:“System.Drawing.Bitmap”。 是的,我是网络世界编程的新手。是的我已经找了其他的例子,但他们似乎只返回一张图片。谢谢你的帮助。

public class ZipCode
{
    public int ZipCodeId { get; set; }
    [NotMapped]
    public Image ZipAsImage
    {
        get
        {
            // Create a blank iamge for now to test.
            return new Bitmap(50, 50);
        }
        set { }
    }
}

我的ApiController类

public class ZipCodesController : ApiController
{
    private MyContext db = new MyContext();

    // GET api/ZipCodesController
    public IEnumerable<ZipCode> GetZipCodes()
    {
        return db.zipcodes.AsEnumerable();
    }

    // GET api/ZipCodesController/5
    public ZipCode GetZipCode(int id)
    {
        ZipCode zipcode = db.ZipCodes.Find(id);
        if (zipcode == null)
        {
            throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound));
        }

        return zipcode;
    }
...

我的控制器类

public class ZipCodesController : Controller
{
    private MyContext db = new MyContext();

    //
    // GET: /ZipCodes/

    public ActionResult Index()
    {
        var zipcodes = db.ZipCodes.Include(z => z.State);
        return View(zipcodes.ToList());
    }

    //
    // GET: /ZipCodes/Details/5

    public ActionResult Details(int id = 0)
    {
        ZipCode zipcode = db.ZipCodes.Find(id);
        if (zipcode == null)
        {
            return HttpNotFound();
        }
        return View(zipcode);
    }
...

1 个答案:

答案 0 :(得分:0)

我不明白你要展示MVC控制器的地方。我错过了什么?但是对于Webapi(ApiController)您可以按如下方式重新编写方法。这应该在一个响应中传递enitre对象。

 public HttpResponseMessage GetZipCode(int id)
{
    ZipCode zipcode = db.ZipCodes.Find(id);
    if (zipcode == null)
    {
        return Request.CreateResponse(HttpStatusCode.NotFound)
    }

    return Request.CreateResponse(HttpStatusCode.OK,zipcode);
}

发送二进制图像。您需要设置Straemcontent和content-type。我找到了一个可以帮助您Images with Webapi的链接。浏览整个帖子。你可能会很快弄清楚什么是错过的......