UPS API - LabelLinksIndicator - 未将对象引用设置为对象的实例

发布于 2024-12-01 06:17:34 字数 7478 浏览 5 评论 0原文

以下是一些用于生成 UPS 运输标签的代码。它基于 UPS 开发工具包中提供的 .net 示例。我的问题是下面以粗体突出显示的行。它抛出如下错误“System.NullReferenceException:未将对象引用设置到对象的实例。”。

据我所知,如果您希望 UPS API 返回标签链接,则需要此 LabelLinksIndicator。否则,它会返回货件的详细信息,但不返回标签。 UPS 文档的相关部分位于我的问题的底部。

我需要做什么来克服这个错误?从文档中我不清楚应该为 LabelLinksIndicator 传递什么值。我尝试过传递 1、true 和空字符串。每种情况下都会出现同样的错误。错误消息似乎表明有一个我需要实例化的对象,但我当前还没有实例化。但是,我不知道要实例化什么。不幸的是,网络和 UPS.com 上的可用信息很少。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Foo.Web.UPSWebReference;


namespace Foo.Web.Auth
{
    public partial class UPS : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Request.QueryString["id"] != null)
            {
                try
                {
                    ShipService shpSvc = new ShipService();
                    ShipmentRequest shipmentRequest = new ShipmentRequest();
                    UPSSecurity upss = new UPSSecurity();
                    UPSSecurityServiceAccessToken upssSvcAccessToken = new UPSSecurityServiceAccessToken();
                    upssSvcAccessToken.AccessLicenseNumber = "foo";
                    upss.ServiceAccessToken = upssSvcAccessToken;
                    UPSSecurityUsernameToken upssUsrNameToken = new UPSSecurityUsernameToken();
                    upssUsrNameToken.Username = "foo";
                    upssUsrNameToken.Password = "foo";
                    upss.UsernameToken = upssUsrNameToken;
                    shpSvc.UPSSecurityValue = upss;
                    RequestType request = new RequestType();
                    String[] requestOption = { "nonvalidate" };
                    request.RequestOption = requestOption;
                    shipmentRequest.Request = request;
                    ShipmentType shipment = new ShipmentType();
                    shipment.Description = "Ship webservice example";
                    ReturnServiceType rtn = new ReturnServiceType();
                    rtn.Code = "8";
                    rtn.Description = "Description";

                    ShipperType shipper = new ShipperType();
                    shipper.ShipperNumber = "foo";
                    PaymentInfoType paymentInfo = new PaymentInfoType();
                    ShipmentChargeType shpmentCharge = new ShipmentChargeType();
                    BillShipperType billShipper = new BillShipperType();
                    billShipper.AccountNumber = "foo";
                    shpmentCharge.BillShipper = billShipper;
                    shpmentCharge.Type = "01";
                    ShipmentChargeType[] shpmentChargeArray = { shpmentCharge };
                    paymentInfo.ShipmentCharge = shpmentChargeArray;
                    shipment.PaymentInformation = paymentInfo;
                    foo.Web.UPSWebReference.ShipAddressType shipperAddress = new foo.Web.UPSWebReference.ShipAddressType();
                    String[] addressLine = { "301 166th Street" };
                    shipperAddress.AddressLine = addressLine;
                    shipperAddress.City = "Jersey City";
                    shipperAddress.PostalCode = "07310";
                    shipperAddress.StateProvinceCode = "NJ";
                    shipperAddress.CountryCode = "US";
                    shipperAddress.AddressLine = addressLine;
                    shipper.Address = shipperAddress;
                    shipper.Name = "ABC Associates";
                    shipper.AttentionName = "ABC Associates";
                    ShipPhoneType shipperPhone = new ShipPhoneType();
                    shipperPhone.Number = "1234567890";
                    shipper.Phone = shipperPhone;
                    shipment.Shipper = shipper;
                    ShipFromType shipFrom = new ShipFromType();
                    foo.Web.UPSWebReference.ShipAddressType shipFromAddress = new foo.Web.UPSWebReference.ShipAddressType();
                    String[] shipFromAddressLine = { "100 82nd Street" };
                    shipFromAddress.AddressLine = addressLine;
                    shipFromAddress.City = "New York";
                    shipFromAddress.PostalCode = "10024";
                    shipFromAddress.StateProvinceCode = "NY";
                    shipFromAddress.CountryCode = "US";
                    shipFrom.Address = shipFromAddress;
                    shipFrom.AttentionName = "Mr.ABC";
                    shipFrom.Name = "ABC Associates";
                    shipment.ShipFrom = shipFrom;
                    ShipToType shipTo = new ShipToType();
                    ShipToAddressType shipToAddress = new ShipToAddressType();
                    String[] addressLine1 = { "Some Street" };
                    shipToAddress.AddressLine = addressLine1;
                    shipToAddress.City = "Roswell";
                    shipToAddress.PostalCode = "30076";
                    shipToAddress.StateProvinceCode = "GA";
                    shipToAddress.CountryCode = "US";
                    shipTo.Address = shipToAddress;
                    shipTo.Address.ResidentialAddressIndicator = "1"; //dan
                    shipTo.AttentionName = "DEF";
                    shipTo.Name = "DEF Associates";
                    ShipPhoneType shipToPhone = new ShipPhoneType();
                    shipToPhone.Number = "1234567890";
                    shipTo.Phone = shipToPhone;
                    shipment.ShipTo = shipTo;
                    ServiceType service = new ServiceType();
                    service.Code = "03"; 
                    service.Description = "Ground";
                    shipment.Service = service;
                    PackageType package = new PackageType();
                    package.Description = "Deliver to Warehouse";
                    PackageWeightType packageWeight = new PackageWeightType();
                    packageWeight.Weight = "10";
                    ShipUnitOfMeasurementType uom = new ShipUnitOfMeasurementType();
                    uom.Code = "LBS";
                    packageWeight.UnitOfMeasurement = uom;
                    package.PackageWeight = packageWeight;
                    PackagingType packType = new PackagingType();
                    packType.Code = "02";
                    package.Packaging = packType;

                    PackageType[] pkgArray = { package };
                    shipment.Package = pkgArray;
                    LabelSpecificationType labelSpec = new LabelSpecificationType();

                    LabelImageFormatType labelImageFormat = new LabelImageFormatType();
                    labelImageFormat.Code = "GIF";
                    labelSpec.LabelImageFormat = labelImageFormat;
                    string userAgent = Request.UserAgent; 
                    labelSpec.HTTPUserAgent = userAgent; 
                    shipmentRequest.LabelSpecification = labelSpec;

                    **shipmentRequest.Shipment.ShipmentServiceOptions.LabelDelivery.LabelLinksIndicator = "1";**

                    shipmentRequest.Shipment = shipment;


                    System.Net.ServicePointManager.CertificatePolicy = new TrustAllCertificatePolicy();

                    ShipmentResponse shipmentResponse = shpSvc.ProcessShipment(shipmentRequest);



                    Response.Redirect(shipmentResponse.ShipmentResults.LabelURL.ToString());

在此处输入图像描述

Below is some code for generating a UPS shipping label. It is based on the .net sample provided in the UPS developer kit. My problem is with the line highlighted in bold below. It throws and error as follows "System.NullReferenceException: Object reference not set to an instance of an object.".

What I know is this LabelLinksIndicator is required if you want the UPS API to return a link to a label. Otherwise it returns details on the shipment but no label. The relevant section of the UPS documentation is at the bottom of my question.

What do I need to do to overcome this error? It is not clear to me from the documentation what value I should be passing for LabelLinksIndicator. I've tried passing a 1, true and and an empty string. Same error in every case. The error message seems to indicate that there is an object I need to instantiate that I am not currently. However, I can't figure out what to instantiate. The available information on the web and on UPS.com is unfortunately sparse.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Foo.Web.UPSWebReference;


namespace Foo.Web.Auth
{
    public partial class UPS : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Request.QueryString["id"] != null)
            {
                try
                {
                    ShipService shpSvc = new ShipService();
                    ShipmentRequest shipmentRequest = new ShipmentRequest();
                    UPSSecurity upss = new UPSSecurity();
                    UPSSecurityServiceAccessToken upssSvcAccessToken = new UPSSecurityServiceAccessToken();
                    upssSvcAccessToken.AccessLicenseNumber = "foo";
                    upss.ServiceAccessToken = upssSvcAccessToken;
                    UPSSecurityUsernameToken upssUsrNameToken = new UPSSecurityUsernameToken();
                    upssUsrNameToken.Username = "foo";
                    upssUsrNameToken.Password = "foo";
                    upss.UsernameToken = upssUsrNameToken;
                    shpSvc.UPSSecurityValue = upss;
                    RequestType request = new RequestType();
                    String[] requestOption = { "nonvalidate" };
                    request.RequestOption = requestOption;
                    shipmentRequest.Request = request;
                    ShipmentType shipment = new ShipmentType();
                    shipment.Description = "Ship webservice example";
                    ReturnServiceType rtn = new ReturnServiceType();
                    rtn.Code = "8";
                    rtn.Description = "Description";

                    ShipperType shipper = new ShipperType();
                    shipper.ShipperNumber = "foo";
                    PaymentInfoType paymentInfo = new PaymentInfoType();
                    ShipmentChargeType shpmentCharge = new ShipmentChargeType();
                    BillShipperType billShipper = new BillShipperType();
                    billShipper.AccountNumber = "foo";
                    shpmentCharge.BillShipper = billShipper;
                    shpmentCharge.Type = "01";
                    ShipmentChargeType[] shpmentChargeArray = { shpmentCharge };
                    paymentInfo.ShipmentCharge = shpmentChargeArray;
                    shipment.PaymentInformation = paymentInfo;
                    foo.Web.UPSWebReference.ShipAddressType shipperAddress = new foo.Web.UPSWebReference.ShipAddressType();
                    String[] addressLine = { "301 166th Street" };
                    shipperAddress.AddressLine = addressLine;
                    shipperAddress.City = "Jersey City";
                    shipperAddress.PostalCode = "07310";
                    shipperAddress.StateProvinceCode = "NJ";
                    shipperAddress.CountryCode = "US";
                    shipperAddress.AddressLine = addressLine;
                    shipper.Address = shipperAddress;
                    shipper.Name = "ABC Associates";
                    shipper.AttentionName = "ABC Associates";
                    ShipPhoneType shipperPhone = new ShipPhoneType();
                    shipperPhone.Number = "1234567890";
                    shipper.Phone = shipperPhone;
                    shipment.Shipper = shipper;
                    ShipFromType shipFrom = new ShipFromType();
                    foo.Web.UPSWebReference.ShipAddressType shipFromAddress = new foo.Web.UPSWebReference.ShipAddressType();
                    String[] shipFromAddressLine = { "100 82nd Street" };
                    shipFromAddress.AddressLine = addressLine;
                    shipFromAddress.City = "New York";
                    shipFromAddress.PostalCode = "10024";
                    shipFromAddress.StateProvinceCode = "NY";
                    shipFromAddress.CountryCode = "US";
                    shipFrom.Address = shipFromAddress;
                    shipFrom.AttentionName = "Mr.ABC";
                    shipFrom.Name = "ABC Associates";
                    shipment.ShipFrom = shipFrom;
                    ShipToType shipTo = new ShipToType();
                    ShipToAddressType shipToAddress = new ShipToAddressType();
                    String[] addressLine1 = { "Some Street" };
                    shipToAddress.AddressLine = addressLine1;
                    shipToAddress.City = "Roswell";
                    shipToAddress.PostalCode = "30076";
                    shipToAddress.StateProvinceCode = "GA";
                    shipToAddress.CountryCode = "US";
                    shipTo.Address = shipToAddress;
                    shipTo.Address.ResidentialAddressIndicator = "1"; //dan
                    shipTo.AttentionName = "DEF";
                    shipTo.Name = "DEF Associates";
                    ShipPhoneType shipToPhone = new ShipPhoneType();
                    shipToPhone.Number = "1234567890";
                    shipTo.Phone = shipToPhone;
                    shipment.ShipTo = shipTo;
                    ServiceType service = new ServiceType();
                    service.Code = "03"; 
                    service.Description = "Ground";
                    shipment.Service = service;
                    PackageType package = new PackageType();
                    package.Description = "Deliver to Warehouse";
                    PackageWeightType packageWeight = new PackageWeightType();
                    packageWeight.Weight = "10";
                    ShipUnitOfMeasurementType uom = new ShipUnitOfMeasurementType();
                    uom.Code = "LBS";
                    packageWeight.UnitOfMeasurement = uom;
                    package.PackageWeight = packageWeight;
                    PackagingType packType = new PackagingType();
                    packType.Code = "02";
                    package.Packaging = packType;

                    PackageType[] pkgArray = { package };
                    shipment.Package = pkgArray;
                    LabelSpecificationType labelSpec = new LabelSpecificationType();

                    LabelImageFormatType labelImageFormat = new LabelImageFormatType();
                    labelImageFormat.Code = "GIF";
                    labelSpec.LabelImageFormat = labelImageFormat;
                    string userAgent = Request.UserAgent; 
                    labelSpec.HTTPUserAgent = userAgent; 
                    shipmentRequest.LabelSpecification = labelSpec;

                    **shipmentRequest.Shipment.ShipmentServiceOptions.LabelDelivery.LabelLinksIndicator = "1";**

                    shipmentRequest.Shipment = shipment;


                    System.Net.ServicePointManager.CertificatePolicy = new TrustAllCertificatePolicy();

                    ShipmentResponse shipmentResponse = shpSvc.ProcessShipment(shipmentRequest);



                    Response.Redirect(shipmentResponse.ShipmentResults.LabelURL.ToString());

enter image description here

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

剩一世无双 2024-12-08 06:17:34

我明白问题出在哪里了。我需要首先新建一个实例

ShipmentTypeShipmentServiceOptions shipServOpt = new ShipmentTypeServiceOptions();

LabelDeliveryType labelDel = new LabelDeliveryType();

然后设置 LabelLinksIndicator 元素

labeldel.LabelLinksIndicator = "";

,然后将选项分配给我的货件实例。

shipment.ShipmentServiceOptions = shipServOpt;

注意,ShipmentServiceOptionsType 与 ShipmentTypeServiceOptions 不同。这让我困惑了一段时间。

亲爱的 UPS,如果您正在阅读本文,请考虑改进您的文档并提供更完整的代码示例集。

I figured out what the problem was. I needed first to new-up an instance of

ShipmentTypeShipmentServiceOptions shipServOpt = new ShipmentTypeServiceOptions();

and

LabelDeliveryType labelDel = new LabelDeliveryType();

Then set the LabelLinksIndicator element

labeldel.LabelLinksIndicator = "";

Then assign the options to my shipment instance

shipment.ShipmentServiceOptions = shipServOpt;

Note, ShipmentServiceOptionsType is NOT the same as ShipmentTypeServiceOptions. This tripped me up for a while.

Dear UPS, if you are reading this please consider improving upon your documentation and providing a more complete set of code examples.

请恋爱 2024-12-08 06:17:34

shipmentRequest.Shipment 似乎为空,因为您在下一行之前没有为其分配任何内容。因此,您不能执行shipmentRequest.Shipment.ANYTHING。交换它们,这样你就有了

shipmentRequest.Shipment = shipment;    
shipmentRequest.Shipment.ShipmentServiceOptions.LabelDelivery.LabelLinksIndicator = "1"; 

shipmentRequest.Shipment appears to be null, since you aren't assigning anything to it until the next line. So, you can't do shipmentRequest.Shipment.ANYTHING. Switch them around, so that you have

shipmentRequest.Shipment = shipment;    
shipmentRequest.Shipment.ShipmentServiceOptions.LabelDelivery.LabelLinksIndicator = "1"; 
懒猫 2024-12-08 06:17:34

该元素需要在 XML 中作为 传递。在您的示例中,您将其作为 1 发送,这是无效的。

The element needs to get passed as <LabelLinksIndicator/> in the XML. In your sample you'd be sending it as <LabelLinksIndicator>1</LabelLinksIndicator> which is invalid.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文