问题标题有它的要点,但细节更多涉及。我有一个.Net 2.0 Web窗体应用程序在服务器端执行Web请求,以发送POST到.Net 4.0 ASP.NET MVC 4应用程序操作。我也尝试过使用Web API控制器。当我执行这篇文章时,我从服务器上获得了401.
在我的情况下,两个应用程序都在我的机器上本地运行在Visual Studio 2013的不同实例中(因此,使用不同的端口)。
我的目标是在MVC应用程序中处理POST信息(而不是使用Web Api控制器),并将字符串或对象作为Web响应返回到.Net 2.0 Web窗体应用程序。
我很确定这里的问题是CORS,但是如何在后端执行POST而不是通过客户端上的Ajax调用来解决这个问题呢?
编辑1 - 从后端添加Web请求代码
Protected Sub btnPostWebRequest_Click(sender As Object, e As EventArgs) Handles btnPostWebRequest.Click
'Dim url As String = "http://localhost:65070/api/viewgenerator"
Dim url As String = "http://localhost:65070/PdfManagement/GenerateView"
Dim postData As String = GetPostData(Request)
Dim myHttpWebRequest As HttpWebRequest = DirectCast(HttpWebRequest.Create(url), HttpWebRequest)
myHttpWebRequest.Method = "POST"
Dim data As Byte() = Encoding.ASCII.GetBytes(postData)
myHttpWebRequest.ContentType = "application/x-www-form-urlencoded"
myHttpWebRequest.ContentLength = data.Length
Dim requestStream As Stream = myHttpWebRequest.GetRequestStream()
requestStream.Write(data, 0, data.Length)
requestStream.Close()
Dim myHttpWebResponse As HttpWebResponse = DirectCast(myHttpWebRequest.GetResponse(), HttpWebResponse)
Dim responseStream As Stream = myHttpWebResponse.GetResponseStream()
Dim myStreamReader As New StreamReader(responseStream, Encoding.[Default])
Dim pageContent As String = myStreamReader.ReadToEnd()
myStreamReader.Close()
responseStream.Close()
myHttpWebResponse.Close()
End Sub
正在发布的ASP.NET MVC应用程序中的操作类似于下面的代码。它基本上是空的。我只是想验证我是否首先从POSTING应用程序获取数据。
[HttpPost]
public string GenerateView(string postData)
{
return "";
}
当单步执行POST的应用程序时,它在此行上出错:
Dim myHttpWebResponse As HttpWebResponse = DirectCast(myHttpWebRequest.GetResponse(), HttpWebResponse)
在Fiddler2启动并运行的情况下,我甚至没有看到ASP.NET MVC应用程序的帖子。我看到的错误是:
远程服务器返回错误:(401)未经授权。