当前位置: 首页 > 知识库问答 >
问题:

删除实体的Rest API调用返回403错误

石正信
2023-03-14

下面的代码旨在用给定的分区键和ROWKEY从表中删除一行。但我在Fiddler中得到以下请求/响应。我怎样才能纠正错误?

DELETE https://hireazureStorageAcct.table.core.windows.net/mytable(PartitionKey='sample1',%20rowkey='0001')?timeout=20 http/1.1接受:Application/JSON;odata=nometadata X-ms-日期:Mon,Man,May 2017 17:59:14 GMT X-ms-版本:2015-04-05接受-字符集:UTF-8 MaxDataServiceVersion:3.0;Netfx DataServiceVersion:1.0;Netfx if-match:*内容-类型:Application/JSON授权:

HTTP/1.1 403服务器无法验证请求。确保授权标头的值包含签名的格式正确。content-length:299 content-type:application/json server:microsoft-httpapi/2.0 x-ms-request-id:a9244f7f-0002-0048-0824-c8afc5000000日期:Mon,08 May 2017 17:59:14 GMT

{“OData.Error”:{“Code”:“AuthenticationFailed”,“Message”:{“Lang”:“EN-US”,“value”:“服务器无法对请求进行身份验证.请确保授权标头得值包含签名得格式正确.\nRequestId:A9244F7F-0002-0048-0824-C8AFC5000000\nTime:2017-05-08T17:59:14.9335100Z”}}}

公共静态int DeleteEntity(string storageAccount,string accessKey,string tableName,string partitionkey,string rowkey){string uri=$@“https://{storageAccount}.table.core.windows.net/{tableName}(partitionkey='{partitionkey}‘,rowkey='{rowkey}')?Timeout=20”;string resource=$@“{tableName}”;

        // Web request 
        var request = (HttpWebRequest)WebRequest.Create(uri);
        request.Method = "DELETE";
        request.Accept = "application/json;odata=nometadata";
        request.Headers.Add("x-ms-date", DateTime.UtcNow.ToString("R", System.Globalization.CultureInfo.InvariantCulture));
        request.Headers.Add("x-ms-version", "2015-04-05");
        request.Headers.Add("Accept-Charset", "UTF-8");
        request.Headers.Add("MaxDataServiceVersion", "3.0;NetFx");
        request.Headers.Add("DataServiceVersion", "1.0;NetFx");
        request.Headers.Add("If-Match", "*");
        request.ContentType = "application/json";


        // Signature string for  Shared Key Lite Authentication must be in the form
        // StringToSign = Date + "\n" + CanonicalizedResource
        // Date 
        string stringToSign = request.Headers["x-ms-date"] + "\n";

        // Canonicalized Resource in the format  /{0}/{1} where 0 is name of the account and 1 is resources URI path
        stringToSign += "/" + storageAccount + "/" + resource;

        // Hash-based Message Authentication Code (HMAC) using SHA256 hash
        var hasher = new HMACSHA256(Convert.FromBase64String(accessKey));

        // Authorization header
        string strAuthorization = "SharedKeyLite " + storageAccount + ":" + Convert.ToBase64String(hasher.ComputeHash(System.Text.Encoding.UTF8.GetBytes(stringToSign)));

        // Add the Authorization header to the request
        request.Headers.Add("Authorization", strAuthorization);
        Thread.Sleep(1000);
        // Execute the request
        try
        {
            using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
            {
                using (var r = new StreamReader(response.GetResponseStream()))
                {
                    return (int)response.StatusCode;
                }
            }
        }
        catch (WebException ex)
        {
            // get the message from the exception response
            using (var sr = new StreamReader(ex.Response.GetResponseStream()))
            {
                var res = sr.ReadToEnd();
                // Log res if required
            }

            return (int)ex.Status;
        }
    }

共有1个答案

上官高畅
2023-03-14

状态403意味着您需要进行身份验证才能访问资源。任何像样的服务器都不会给你任何包含任何关于资源的信息的东西。所以无论资源是否存在,您都会得到相同的答复。

 类似资料:
  • 问题内容: 我有以下代码: 那应该从给定的URL返回图像。 我测试了以下两个随机选择的URL: https://www.google.co.ma/images/srpr/logo4w.png http://www.earthtimes.org/newsimage/osteoderms-storing-minerals-helped-huge-dinosaurs-survive_3011.jpg 第

  • 你好,我在删除实体时遇到了问题。entitymanager不会删除实体。有人看到代码中的错误吗? 错误消息: java.lang.Assertionerror: 预期 :null 实际 :帐户{id=1, 客户=客户 id=1, 名字=“金”, 姓氏=“佩德森”, email='kim@yahoo.no“, 电话号码=”90045870“, 出生=1980-11-05 00:00:00.0}, 登

  • 删除父实体时,我还想删除关联的子实体(从数据库中)。我试图在删除时使用级联,如下所示,但我一定做错了什么。 当对父实体对象调用删除时,我收到错误消息:“该实体仍在数据库的其他地方引用”。我可以确认该实体在数据库的其他地方引用的唯一地方是在下面的两个表中(如果我手动从数据库中删除子行,对父实体对象的删除调用工作正常)。在过去的9个小时里,我一直在阅读实体对象并尝试不同的东西。我做错了什么? 这是我的

  • 我正在尝试将数据存储从一个应用程序复制到另一个应用程序(live to dev server)。我首先需要删除dev服务器(我正在使用的实际dev应用程序,不要与本地dev服务器混淆)上的所有实体。我正在数据存储管理控制台中执行此操作,但在该过程完成后,仍然保留和实体。据我所知,在删除过程中,这些应该是临时的。此外,偶尔当我去datastore管理控制台时(大约一半的时间),我也会看到一些我删除的

  • 我正在做一个spring boot项目,其中包括thymeleaf,spring security。当我执行以下操作时效果很好:显示产品列表、显示产品详细信息、添加新产品、更新现有产品。 但当我执行-删除产品时,会出现以下错误: 白标错误页面 此应用程序没有/error的显式映射,因此您将其视为一种回退。 18 16:59:16BDT 2019 出现意外错误(类型=禁止,状态=403)。 被禁止的

  • 在本地开发环境中使用Eclipse(Mars.1发行版(4.5.1))中的Forge 1.8.9。 在环游世界一小段时间后,然后注销该世界并返回(同一个会话中,退出并关闭MC),世界将无法出现在控制台中。该位置与“一切正常”登录中的位置相同。另外还有一个错误的位置!错误 控制台的错误如下: 我已经尝试过一些变化,包括Minecraft Forge:使用正确的连接游戏侦听器进行设置位置和角度,但不使