远程服务器返回500内部服务器错误Asp.Net Web API

时间:2015-07-15 17:03:06

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

我正在努力通过WebAPI使用.Net Framework 4.0

下载PDF文件

当调用rest服务器时,它会在request.GetResponse()上抛出500错误,我无法理解为什么。我看过其他各种例子,我已经遵循了,但我仍然遇到同样的问题。有人可以帮忙吗?

以下代码是我的RestFul服务中的内容:

          [HttpPost]
    public HttpResponseMessage GetPdfRecordData()
    {

        HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
        var stream = new FileStream(pdfDoc, FileMode.Open);
        stream.Position = 0;
        result.Content = new StreamContent(stream);
        result.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment") { FileName = "pdf" };
        result.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/pdf");
        result.Content.Headers.ContentDisposition.FileName = "pdf";
        return result;
    }

以下代码是从Winforms调用它的地方:

             private void GetPDF()
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URI);
        request.ContentType = "application/pdf";
        request.Method = "POST";

       HttpWebResponse response =(HttpWebResponse)request.GetResponse();

       byte[] bytes = null;
       using (Stream stream = response.GetResponseStream())
       using (MemoryStream ms = new MemoryStream())
       {
           int count = 0;
           do
           {
               byte[] buf = new byte[1024];
               count = stream.Read(buf, 0, 1024);
               ms.Write(buf, 0, count);
           } while (stream.CanRead && count > 0);
           ms.Position = 0;
           bytes = ms.ToArray();
       }

       var filename = "pdf" + ".pdf";

       HttpContext.Current.Response.ContentType = "application/pdf";
       HttpContext.Current.Response.Headers.Add("Content-Disposition", "attachment; filename=\"" + filename + "\"");
       HttpContext.Current.Response.BinaryWrite(bytes);

Full StackTrace:

at System.Net.HttpWebRequest.GetResponse()    at WindowsFormsApplication1.Form1.GetPDF()在C:\ Users \ Andrew \ documents \ visual studio 2010 \ Projects \ WindowsFormsApplication1 \ WindowsFormsApplication1 \ Form1.cs:line 216    at WindowsFormsApplication1.Form1.btnPDF_Click(Object sender,EventArgs e)位于C:\ Users \ Andrew \ documents \ visual studio 2010 \ Projects \ WindowsFormsApplication1 \ WindowsFormsApplication1 \ Form1.cs:第265行    在System.Windows.Forms.Control.OnClick(EventArgs e)    在System.Windows.Forms.Button.OnClick(EventArgs e)    在System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)    在System.Windows.Forms.Control.WmMouseUp(消息& m,MouseButtons按钮,Int32点击)    在System.Windows.Forms.Control.WndProc(消息& m)    在System.Windows.Forms.ButtonBase.WndProc(消息& m)    在System.Windows.Forms.Button.WndProc(消息& m)    在System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)    在System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)    在System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd,Int32 msg,IntPtr wparam,IntPtr lparam)    在System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)    在System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID,Int32 reason,Int32 pvLoopData)    在System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason,ApplicationContext context)    在System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason,ApplicationContext context)    在System.Windows.Forms.Application.Run(Form mainForm)    at WindowsFormsApplication1.Program.Main()在C:\ Users \ Andrew \ documents \ visual studio 2010 \ Projects \ WindowsFormsApplication1 \ WindowsFormsApplication1 \ Program.cs:第18行    在System.AppDomain._nExecuteAssembly(RuntimeAssembly程序集,String [] args)    在System.AppDomain.ExecuteAssembly(String assemblyFile,Evidence assemblySecurity,String [] args)    在Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()    在System.Threading.ThreadHelper.ThreadStart_Context(对象状态)    at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext,ContextCallback callback,Object state,Boolean preserveSyncCtx)    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback callback,Object state,Boolean preserveSyncCtx)    在System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback回调,对象状态)    在System.Threading.ThreadHelper.ThreadStart()

0 个答案:

没有答案