为什么在从Rails控制台调用方法时,request.UrlReferrer在ASP.net中为空?

时间:2014-10-13 09:51:43

标签: asp.net ruby-on-rails

Ruby on Rails 4.0

案例1)我正在调用一个URL(它位于.net框架上)throw rails console以获取XML数据。但我得到的对象引用未设置为对象的实例。'错误。

案例2)如果我将该URL作为网站上的链接,然后我将点击链接,那时我将获得XML数据。

for ex: <a href="http://localhost:8080/test/affiliate_lead_welcome.aspx?mode=2&affiliate_lead_id=TL1483&username=****.com&password=******/">Lead</a>

我在这里获取XML数据。

但我的要求是我需要rails控制台的数据。(因为我需要运行后台工作)

1) url = 'http://localhost:8080/test/affiliate_lead_welcome.aspx?mode=2&affiliate_lead_id=TL1483&username=****.com&password=******/'

2) uri = URI.parse(url)

3) request = Net::HTTP::Get.new(uri)

4) response = http.request(request)

我正在考虑错误:

Line 32:         string username = common.get_request("username");
Line 33:         string password = common.get_request("password");
Line 34:         string host = Request.UrlReferrer.Host.ToString(); // Request.UrlReferrer.Host is coming null

[NullReferenceException:对象引用未设置为对象的实例。]

4 个答案:

答案 0 :(得分:0)

因为(来自MSDNUrlReferrer(强调是我的):

  

获取有关链接到当前网址的客户端之前请求的网址的信息。

从您的代码中没有此类之前的请求,然后UrlReferrernull。这是对的,你无法避免这种情况,但你可以处理这个特例:

string host = Request.UrlReferrer == null ? "localhost" : Request.UrlReferrer.Host.ToString();

编辑:如果您无法更改ASP.NET服务器端代码,则可以在HTTP标头中插入Referer(是的,它是mispelled):

request = Net::HTTP::Get.new(uri)
request.add_field("Referer", "http://localhost:8080")

答案 1 :(得分:0)

只有在您从任何其他网页重定向到达此年龄时,才能获取UrlReferrer。因为这是UrlReferrer所包含的内容(此页面打开的页面或网址的详细信息)。

在你的情况下,你直接从你的Rails控制台发送一个get请求,它没有提供你的aspx页面。

答案 2 :(得分:0)

如果您直接访问该页面并且request.UrlReferrer设置为任何内容,则会导致&#39;对象引用未设置为对象的实例。&#39; ,就像留给客户的所有事情一样,它是变量。确保Request.UrlReferer设置为null。

if (!(Request.UrlReferrer == null)) {
    ViewState("url") = Request.UrlReferrer.ToString();
}
else {
    ViewState("url") = null;
}

答案 3 :(得分:-1)

if URL = localhost:80/path/to/the/page.html

http = Net::HTTP.new("localhost", 80)
req = Net::HTTP::Get.new("/path/to/the/page.html", {'Referer' => 'your.site.com'})
response = http.request(req)
puts response.body

这对我来说很好。