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:对象引用未设置为对象的实例。]
答案 0 :(得分:0)
因为(来自MSDN)UrlReferrer
(强调是我的):
获取有关链接到当前网址的客户端之前请求的网址的信息。
从您的代码中没有此类之前的请求,然后UrlReferrer
为null
。这是对的,你无法避免这种情况,但你可以处理这个特例:
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
这对我来说很好。