1
我有2個Web API,它們具有完全相同的代碼和相同的引用。爲什麼Web Api(.Net Core)總是返回JSON而忽略ContentType中的值?
- 第一個(名爲Project A)在.NET 4.6中運行,是舊的Web API項目
- 第二個(名爲Project B)在.NET 4.6太運行,但新的.NET的核心web api項目。
我用同樣的參考如下
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Web;
using System.Web.Http;
using PdfSharp.Drawing;
using PdfSharp.Pdf;
這裏是它們都使用的代碼。
public HttpResponseMessage TestReport()
{
HttpResponseMessage response;
PdfDocument document = HelloWorld();
using (MemoryStream memoryStream = new MemoryStream()) {
document.Save(memoryStream, false);
byte[] buffer = memoryStream.GetBuffer();
var contentLength = buffer.Length;
response = new HttpResponseMessage(HttpStatusCode.OK);
// Byte Array Test
//response.Content = new ByteArrayContent(buffer);
//response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
//response.Content.Headers.ContentLength = contentLength;
//response.Content.Headers.ContentDisposition.FileName = "anything.pdf";
//response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
//var test = response.Content.ReadAsStreamAsync();
// Stream Content Test
response.Content = new StreamContent(new MemoryStream(buffer));
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
response.Content.Headers.ContentLength = contentLength;
ContentDispositionHeaderValue contentDisposition = null;
if (ContentDispositionHeaderValue.TryParse("attachment; filename=" + "helloWorld" + ".pdf", out contentDisposition)) {
response.Content.Headers.ContentDisposition = contentDisposition;
}
return response;
};
}
public PdfDocument HelloWorld()
{
// Create a new PDF document
PdfDocument document = new PdfDocument();
document.Info.Title = "Created with PDFsharp";
// Create an empty page
PdfPage page = document.AddPage();
// Get an XGraphics object for drawing
XGraphics gfx = XGraphics.FromPdfPage(page);
//XPdfFontOptions options = new XPdfFontOptions(PdfFontEncoding.Unicode, PdfFontEmbedding.Always);
// Create a font
XFont font = new XFont("Times New Roman", 20, XFontStyle.BoldItalic);
// Draw the text
gfx.DrawString("Hello, World!", font, XBrushes.Black,
new XRect(0, 0, page.Width, page.Height),
XStringFormats.Center);
// Save the document...
const string filename = "HelloWorld_tempfile.pdf";
//document.Save(filename);
return document;
}
當我打電話給他們(無論是從另一控制器或從瀏覽器),它們產生2個不同的結果
- 項目A返回與正確的響應報頭的PDF文件是應用/ PDF
- 項目B總是返回Json(application/json)格式,這與我在響應頭文件中設置的內容無關。我已經嘗試過XML,文本,流,bytearrays。什麼都沒有
我的問題是:
- 究竟發生了什麼事?是微軟@#%^ &它呢?
- 什麼我可以爲項目B沒有返回正確的響應(如我所定義)
P/S:這是我的web.config文件
項目B:從模板默認(我不能將其粘貼在這裏,不知道爲什麼)
項目A:從默認模板(我可以在這裏不糊,不知道爲什麼)
你必須用正確的值發送'accept'頭。 – NtFreX
請從工作api項目 –
分享WebApiConfig.cs嗨,大家好,這是我的Web.config'<?xml version =「1.0」encoding =「utf-8」?> <! - 在appsettings.json中配置您的應用程序設置。瞭解更多http://go.microsoft.com/fwlink/?LinkId=786380 - > <添加名稱= 「aspNetCore」 路徑= 「*」 動詞= 「*」 modules =「AspNetCoreModule」resourceType =「Unspecified」/> configuration>' –